两个常用算法day1
1.递归,经典汉诺塔问题、
河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内之塔为越战时北越的首都,即现在的胡志明市;1883年法国数学家Edouar Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒所支撑,开始时神在第一根棒上放置64个由上至下依由小到大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日的来临之时。
解法:
如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果
盘数超过两个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B,A->C,B->C这三个步骤,而被遮住的部分,其实就是进入程式的递回处理。事实上,若有n个盘子,则先移动完毕所需次数为(2n)-1,所以当盘数为64时,则所需次数为(264)-1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什么概念,就假设每秒钟搬一个盘子好了,也要5850亿年左右。
#include <stdio.h>void hanoi(int n, int A, int B, int C)
{if(n == 1)printf("Move sheet %d from %c to %c\n", n, A, C);else{hanoi(n-1, A, C, B);printf("Move sheet %d from %c to %c\n", n, A, C);hanoi(n-1, B, A, C);}
}int main(void)
{int n;printf("请输入盘数: \n");scanf("%d", &n);hanoi(n, 'A', 'B', 'C');return 0;
}
如果结构化函数,可以将其中的printf放在一个函数中,这样结构更加清晰。
2.费氏数列
Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:若有一只兔子每个月生一只小兔子,一个月后也开
始生产。起初只有一只兔子,一个月后就有两只兔子,二个月后就有三只兔子,三个月后有五只兔子(小兔子投入生产)……
如果不太理解这个例子的话,举个图就知道了,注意新生的小兔子需一个月成长期才会投入生产,类似的道理也可
以用于植物生长这就是Fibonacci数列,一般习惯称之为费式数列,例如一下:1,1,2,3,5,8,13,21,34,55,89
解法:
我们可以讲费式数列定义为以下:
Fn = Fn-1 + Fn-2, n > 1
Fn = n, n = 0 或 1
#include <stdio.h>
#include <stdlib.h>#define N 20int main(void)
{int Fib[N] = {0};int i;Fib[0] = 0;Fib[1] = 1;for(i = 2; i < N; i++)Fib[i] = Fib[i-2] + Fib[i-1];for(i = 0; i < N; i++){printf("%d", Fib[i]);printf(" ");}printf("\n"); return 0;
}
第二个比较容易理解,递归问题需要深入理解,可参考谭浩强c语言中的和尚问题。
两个常用算法day1相关推荐
- Sql分页两种常用算法
今天花了两个小时,写了两种分页的算法. --not in删选法,这种方法查询某个表中前面的数据效率高 create procedure Page_proc ( @pageSize int, --页数, ...
- 最短路(两种常用算法!!!)
https://www.cnblogs.com/chuninggao/p/7301083.html SPFA算法(邻接表):#include <iostream> #include < ...
- 集体智慧及其常用算法
集体智慧定义 是指由许多的个体通过合作与竞争中所显现出来的智慧,集体智慧是一种共享的或者群体的智能.它是从许多个体的合作与竞争中涌现出来的.集体智慧在细菌.动物.人类以及计算机网络中形成,并以多种形式 ...
- 【NLP】为什么中文分词比英文分词更难?有哪些常用算法?(附代码)
导读:人类文明的重要标志之一是语言文字的诞生.数千年来,几乎人类所有知识的传播都是以语言和文字作为媒介. 自然语言处理是使用计算机科学与人工智能技术分析和理解人类语言的一门学科.在人工智能的诸多范畴中 ...
- 强化学习常用算法+实际应用 ,必须get这些核心要点!
新智元报道 编辑:元子 [新智元导读]强化学习(RL)是现代人工智能领域中最热门的研究主题之一,其普及度还在不断增长.本文介绍了开始学习RL需要了解的核心要素.戳右边链接上 了解更多! 强化学 ...
- 图解:轻松看懂机器学习十大常用算法
源 / 人人宽客 通过本篇文章大家可以对ML的常用算法形成常识性的认识.没有代码,没有复杂的理论推导,仅是图解,介绍这些算法是什么以及如何应用(例子主要是分类问题).以后有机会再对单个算法做深入地解析 ...
- 轻松看懂机器学习十大常用算法
本文转载自CSDN aliceyangxi1987的博客 通过本篇文章可以对机器学习(machine learning, ML)的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下, ...
- dataframe常用操作_【Data Mining】机器学习三剑客之Pandas常用算法总结上
一.前言 看pandas之前我建议先看我的numpy总结,效果更佳. SEU-AI蜗牛车:[Data Mining]机器学习三剑客之Numpy常用算法总结zhuanlan.zhihu.com 可以 ...
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
最新文章
- 上三角矩阵的特征值分解
- spring4.x注解概述
- 用官方2012版本131兆,一共有四个自带软件
- S3C2440时钟体系
- 前端开发 图片的插入 。。。。需演练
- 【Deep Learning 一】课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)答案
- 怎么样辨别穷人跟有钱人?
- csdn如何写出文章,拥有较高的推荐量以及点击率
- android 地图不能拖动,英雄联盟不能拖动小地图的处理方法
- android gps 经纬度转换,AndroidGPS获取当前经纬度坐标
- Unity3D中unitypackage文件的图标显示及打开方式异常问题的解决方法(值得收藏)
- 网页游戏是如何快速推广,寻找真实玩家。提高充值消费的。这里都有教程
- java 单体测试_单体测试指南
- 微信小程序发布版本之后自动更新功能
- 《数据库原理与应用》马春梅 禹继国 黄宝贵 祝永志 编著 P30 六个表的实现
- 国内首部《数字货币词典》在新莫干山会议上启动,巴比特智库担任主编单位...
- BootStrap4登录表单验证示例
- 2098799-77-8,Thalidomide-O-PEG4-Propargyl炔丙基在铜催化剂存在下与叠氮化物分子反应
- 2022CoCa: Contrastive Captioners are Image-Text Fountion Models
- 背包问题 -- 博物馆大盗