
数据结构和算法
hunterlew
这个作者很懒,什么都没留下…
展开
-
【转】卡马克快速平方根——平方根倒数算法
-------------------------------------------------------------------------------- 快速平方根(平方根倒数)算法 日前在书上看到一段使用多项式逼近计算平方根的代码,至今都没搞明白作者是怎样推算出那个公式的。但在尝试解决问题的过程中,学到了不少东西,于是便有了这篇心得,写出来和大家共享。其中有错漏的地方,还请大转载 2015-04-28 19:59:55 · 16037 阅读 · 3 评论 -
随机数的产生
在cstdlib中,先用srand(time(NULL))初始化随机数种子,只需要在程序开头调用一次即可。 接着用rand()函数产生[0,RAND_MAX]内均匀分布的随机整数。如果数较小,可以rand()%n产生[0,n-1]的随机整数,但是n如果很大,超过MAX(例如32767),要先rand/RAND_MAX得到0~1随机,然后乘以n。虽然有误差,但一般已经满足要求。原创 2015-09-11 00:28:51 · 569 阅读 · 0 评论 -
二叉树基本操作及二叉排序树
为什么最近总是想敲代码,因为从书上学到的比如数据结构和算法设计等总是没有编程实现过,趁着这段时间较有空,所以练一练,尤其可以顺便练练指针和递归的写法(C两大难点)。 碰到第一个题目叫“树的基本操作”,是一道二叉排序树的建立和递归输出。 关于二叉排序树的概念就理解很久,才发现,原来每次插入都是从根比较起而分左右,而不是和其上一个父节点比较。和标准输入输出对应后验证理解正确开始写代码。 对于树的原创 2015-09-25 22:14:23 · 1255 阅读 · 0 评论 -
bfs实现二叉树按行有序输出
今天做了一道“南湖旁的树”,考察到二叉树层次遍历(宽度优先),一般用队列可实现,但要求按行输出。在书上的程序都是依次便利而没有按行输出,修改了一番,每次队列非空就都pop出来再push新的。因为二叉树嘛,最多也就pop两次,而且题目要求每行从小到大,还需要排序,也简单,就两个比较。 void bfs(){ int m,n,tmp; int i=1; q.push(1); while(!q原创 2015-09-26 01:35:42 · 989 阅读 · 0 评论 -
四舍五入处理
如题: floor(x+0.5); //四舍五入 floor(x)的作用是返回不超过x的最大整数。这样就造成当x是0.999999的时候返回的是0,产生误差。 因此,floor(x)等于1的区间是[1,2),而floor(x+0.5)等于1的x区间是[0.5,1.5),这样就符合四舍五入的规则了。原创 2015-09-07 00:06:47 · 973 阅读 · 0 评论 -
从《循环的代价》中学到的
最近在看《算法竞赛入门经典》,书中提到循环的两大常见问题,并提出一些建议。 第一是算术运算溢出的问题,尤其是n很大而且都是做的乘法的时候。最常见的现象是输出负值,每步printf也能观察到。如果换数据类型仍解决不了的话,可能得改算法了。 书中的例子是对最终的取余%运算作转化。“要计算只包含加法/减法和乘法的整数表达式除以n的余数,可以在每步计算之后对n取余,结果不变。”即把最后一步取模改为循环原创 2015-09-07 00:22:43 · 572 阅读 · 0 评论