《算法之道》精华 经典算法部分
本书作者绉恒明,作者另有一本书《数据结构之弦》,以及《操作系统之哲学原理》都是很好的书这本书可以算得上是深入浅出,文笔很好,作者添加了很多自己的思考本文包括经典算法部分
第十章 排序与次序
插入排序
从无序部分抽取一张插入有序部分为原地排序,无需占用临时存储空间最优情况下为O(n),平均O(n^2)
折半插入排序
插入时使用二分查找
归...
                            
                            
                                分类:
其他好文   时间:
2014-08-09 11:36:47   
                                阅读次数:
238
                             
                    
                        
                            
                            
                                归并排序法是一个基于分治法的比较排序方法,其最差情况复杂度为O(nlogn),而快速排序法的复杂度在最差情况下达到O(n2)本文使用PHP来讨论其算法过程:假设对乱序数列进行排序 $input = array(11,5,1,4,8,7,9,2);思路可以表示:(图是PPT画的,比较简单,请看官见谅)...
                            
                            
                                分类:
其他好文   时间:
2014-08-09 11:20:37   
                                阅读次数:
398
                             
                    
                        
                            
                            
                                冒泡排序:#include #include #include #define N 100000#define M 100000void show_arr(int * a,int n){	int i;	for(i = 0; i a[j+1]) { temp = a[j]; a[j] = a[j+1]...
                            
                            
                                分类:
其他好文   时间:
2014-08-09 00:00:36   
                                阅读次数:
357
                             
                    
                        
                            
                            
                                盒子中有n张卡片,上面的数字分别为k1,k2,...,kn。你有4次机会,每抽一次,记录下卡片上的数字,再将卡片放回盒子中。如果4个数字的和等于m。则你就赢得游戏,否则就是输。直觉上,赢的可能性太低了。请你给出程序,判断是否有赢的可能性。尽量提高方法的效率。
分析:这个题目,和之前Google的一个概率的题目是类似的,当然解决的方法也是类似的,思路大家可以找找前面的题目,不再赘述。这个题目其...
                            
                            
                                分类:
其他好文   时间:
2014-08-08 16:10:16   
                                阅读次数:
215
                             
                    
                        
                            
                            
                                HDU 4911 Inversion(基本算法-排序)
题目大意:
有n个数,问你经过K次交换后的逆序数最少多少个?
解题思路:
根据排序的思想,每一步都能减少1个逆序数,所以K步之多减少K个逆序数。
因此,这题转化为了求逆序数,数据量略微大,用归并排序即可。...
                            
                            
                                分类:
其他好文   时间:
2014-08-08 12:58:36   
                                阅读次数:
228
                             
                    
                        
                            
                            
                                Description
You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand...
                            
                            
                                分类:
其他好文   时间:
2014-08-08 12:47:45   
                                阅读次数:
296
                             
                    
                        
                            
                            
                                说说:这道题初看完全不知道如何下手,但最终也不过就是个二分查找而已,其实不用二分也行,从1开始遍历从显示的结果来看花费的时间是一样的。首先,讨论N是正数的情况。很明显这是个等差数列求和的问题,当总和任然小于N的时候,那么显然此时的n还不够大。当然若直接等于N了,那输出答案就好了。如果最后总和大于N了,但两者之差为奇数,这显然是不行的,因为把序列中任何一个数变为其相反数,那总和都相当于减去一个偶数。所以此时n需要进一步变大,直到两者的差为偶数。最后将序列中的某些正号变为负号,不过具体的我们不用管,问题就解决啦...
                            
                            
                                分类:
其他好文   时间:
2014-08-07 15:48:20   
                                阅读次数:
232
                             
                    
                        
                            
                            
                                二分查找法与我们在孩童时期玩过的猜数的游戏一样,这个游戏里一个朋友会让你猜他正想的一个1至100的数,当你猜了一个数后,他会告诉你三种选择的一个:你猜的比她想的大,或小,或猜中了。为了能用最少的次数猜中,必须从50开始猜,如果她说你猜的太小,则推出那个数在51-100之间,所以下一次猜75((51....
                            
                            
                                分类:
编程语言   时间:
2014-08-07 12:43:29   
                                阅读次数:
234
                             
                    
                        
                            
                            
                                Atitit.现实生活中最好使用的排序方法-----ati排序法总结
 
1. 现在的问题 1
2. 排序的类别::插入排序//交换排序//选择排序(每次最小/大排在相应的位置  )//归并排序//基数排序 1
3. 选择排序法  (垃圾...不好使用) 2
4. 堆排序-(雅十垃圾...不好用) 2
5. 希尔排序法 (雅十垃圾...不好用) 3
6. 冒泡排序法 (雅十垃圾......
                            
                            
                                分类:
其他好文   时间:
2014-08-07 00:53:17   
                                阅读次数:
253
                             
                    
                        
                            
                            
                                题目:输入n个整数,找出其中最小的k个数。
       《剑指offer》给出了两种实现算法:
         算法1:采用Partition加递归法,该算法可以说是快速排序和二分查找的有机结合。算法的时间复杂度为O(n),缺点在于在修改Partition的过程中会修改原数组的值。
         算法2:采用top-k算法。如果要找最小的K个数,我们才用一个含有K个值的大顶堆;如果要找最大的K个数,我们采用小顶堆。该算法的时间复杂度为O(nlogK),是一种比较好的算法,启发于堆排序。...
                            
                            
                                分类:
其他好文   时间:
2014-08-06 23:04:12   
                                阅读次数:
333