![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithms
文章平均质量分 81
Focustc
多学习,多思考 Contact Me caozhk@gmail.com
展开
-
阶乘与斐波那契数的理解
在算法导论第三章中,提到了阶乘和斐波那契数,颠覆或者说是加深了我以前对这两种数的理解。以前是无法想象这个数有多大,但现在是有了一个概念。 阶乘 阶乘的定义为n!= n>0?1:n*(n-1)! 根据斯特林公式Stirling有:n!=sqrt(2pi*n)*(n/e)^n*(1+THETA(1/n)) 由这个公式,数学中关于阶乘与其他函数大小的比较就了然了。 另一原创 2013-07-15 16:25:43 · 2244 阅读 · 0 评论 -
火车运煤问题
火车运煤问题刚面试问到这个题,可惜一直没有为此类问题准备,差点就回答出来了题目内容你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?分析很显然每次走全原创 2014-08-20 08:42:12 · 18537 阅读 · 0 评论 -
《算法之道》精华 难解问题部分
《算法之道》精华 难解问题部分本书作者绉恒明,作者另有一本书《数据结构之弦》,以及《操作系统之哲学原理》都是很好的书这本书可以算得上是深入浅出,文笔很好,作者添加了很多自己的思考本文包括难解问题部分第十三章 易解与难解易解指的是多项式问题,难解指的是指数级问题决策问题需要输出答案是/否若回答为是,通常需要一个证人来证明。对一个潜在证人,证明之后即为真证人优化问题和决策问原创 2014-08-09 11:13:48 · 2644 阅读 · 0 评论 -
《算法之道》精华 经典算法部分
《算法之道》精华 经典算法部分本书作者绉恒明,作者另有一本书《数据结构之弦》,以及《操作系统之哲学原理》都是很好的书这本书可以算得上是深入浅出,文笔很好,作者添加了很多自己的思考本文包括经典算法部分第十章 排序与次序插入排序从无序部分抽取一张插入有序部分为原地排序,无需占用临时存储空间最优情况下为O(n),平均O(n^2)折半插入排序插入时使用二分查找归原创 2014-08-09 11:11:43 · 12056 阅读 · 4 评论 -
如何写出一个较好的快速排序程序
写出一个较好的快速排序程序快速排序是常用的排序算法之一,但要想写出一个又快又准的使用程序,就不是那么简单了需要注意的事项首先要写正确。通常使用递归实现。其递归相当于二叉树展开,因此如果要用迭代实现的话需要使用一个队列来保存后续遍历信息。快速排序需要找到一个pivot值,如果顺序选择pivot则易造成N^2的复杂度,如果使用随机数则效果最好,但开销又太大,采取三数中值法比较合适。原创 2014-07-27 08:02:59 · 18460 阅读 · 0 评论 -
《算法之道》精华 算法设计部分
《算法之道》精华 算法设计部分本书作者绉恒明,作者另有一本书《数据结构之弦》,以及《操作系统之哲学原理》都是很好的书这本书可以算得上是深入浅出,文笔很好,作者添加了很多自己的思考本文仅包括算法设计部分,算法分析略去,并没有严格按照章节顺序来记录附录 算法随想有人喜欢遍历,希望踏遍千山万水,人生丰富多彩;有人一生贪婪,眼界不宽,及时行乐;有人注定穷搜,辛辛苦苦,收获有限;有人善用原创 2014-08-09 11:09:32 · 6249 阅读 · 0 评论 -
《剑指offer》解题笔记
《剑指offer》解题笔记《剑指offer》共50题,这两周使用C++花时间做了一遍,谨在此把一些很巧妙的方法、写代码遇到的难点、易犯错的细节等做一个简单的标注,但不会太过详细,具体算法还是请参考书本。做的比较急,代码还有很多不完善的地方,如有错误,欢迎改正,地址为:github:sword_of_offer。可以使用git clone https://github.com/heL原创 2014-07-22 08:42:31 · 7963 阅读 · 2 评论 -
100层楼扔2个鸡蛋、3个鸡蛋……
原题目现有2个鸡蛋,楼高100层,假设从n层楼及以上扔下会摔碎,n层以下不会,那么怎样扔能以最小的次数得到n?分析最先想起来的是二分法的题目:100层最少需要扔多少次鸡蛋才能求得n?答案是ceil(log2(100))=7 。不过现在只有两个鸡蛋,这种方法就不行了。采用二分法的话,如果1号蛋在50层碎了,那剩下一个鸡蛋只能从1层开始慢慢扔了,需要扔1+49 = 50次。另外一种容易原创 2014-04-16 03:12:13 · 22307 阅读 · 2 评论 -
Algorithms Part 1-Question 5- Dijkstra's shortest-path-最短路径算法
Algorithms: Design and Analysis, Part 1 这是斯坦福大学算法公开课第五章作业的解法。 最短路径算法题目要求 本次要求对于一个200个点的无向图应用著名的Dijkstra算法求最短路径。可以选择用heap来计算,速度更快。我采用python语言,用了多个字典来加快速度。In this programming problem you'll code up Dijkstra's shor原创 2013-08-06 04:48:12 · 4089 阅读 · 0 评论 -
主定理的证明及应用举例
主定理主定理最早出现在《算法导论》中,提供了分治方法带来的递归表达式的渐近复杂度分析。规模为n的问题通过分治,得到a个规模为n/b的问题,每次递归带来的额外计算为c(n^d)T(n) <= aT(n/b)+c(n^d)那么就可以得到问题的复杂度为:原创 2014-04-29 18:54:42 · 44033 阅读 · 7 评论 -
Algorithms Part 1-Question 6- 2SUM Median-数和以及中位数问题
本次有两个编程问题,一个是求两个数的和满足一定值的数目,另一个是求中位数。 2SUM问题 问题描述The goal of this problem is to implement a variant of the 2-SUM algorithm (covered in the Week 6 lecture on hash table applications).The file co原创 2013-08-17 14:15:27 · 4834 阅读 · 1 评论 -
Algorithms Part 1-Question 3- the min cut problem-最小割问题
Algorithms: Design and Analysis, Part 1 Download the text file here. (Right click and save link as)The file contains the adjacency list representation of a simple undirected graph. There are 200原创 2013-07-26 22:20:39 · 4543 阅读 · 1 评论 -
Algorithms Part 1-Question 2-QuickSort-快速排序算法
Algorithms: Design and Analysis, Part 1 第一章讲的是分治算法,即DC,这一章讲的是快速排序QuickSort。作业难度已经增加了,Problem Sets做了两次一不小心只得了四分,编程作业也作了两次才作对。 这次作业是实现快速排序,并改变哨兵元素的选择方法比较性能。哨兵可以选择为第一个、最后一个元素,也可以选取首、尾、中间三个元原创 2013-07-18 16:20:47 · 1521 阅读 · 0 评论 -
斐波那契数的皮萨诺周期
斐波那契数的皮萨诺周期fibonacci数为f0=0, f1=1, fi = f(i-1)+f(i-2)pisano period指的是一个序列对n取模后的周期fibonacci的周期性明显可见对2取模结果为:0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0fibonacci对3取模结果为:0 1 1 2 0 2 2 1 0 1 1 2 0 2 2 1此性质在用于计算超大fibona原创 2016-11-30 14:42:00 · 6128 阅读 · 0 评论