数据结构和算法
Galaxy_Li
这个作者很懒,什么都没留下…
展开
-
一道题的不同解答
Problem:表中存放着n个元素,请设计程序,将表中的所有元素循环左移p个位置(0Solution_1:设置一个能容纳一个元素的辅助空间,并认为其在表的最左边,然后将X0移动到该辅助空间中,X1移动到原来X0的位置,以此类推,最后再将X0移动到原来表中Xn-1的位置,这样一趟相当于完成了一次循环左移,如此循环p次,即可达到题目的要求。时间复杂度:移动总次数为n(p+1),原创 2012-02-24 22:31:13 · 548 阅读 · 0 评论 -
KMP算法
个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数 f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]这种表示法好理解啊:转载 2012-07-28 13:08:01 · 887 阅读 · 0 评论 -
难以捉摸的动态规划
不知在你眼中,动态规划在众多算法中处于什么地位呢?是ACM比赛中不可或缺的技巧之一,又或者是征战POJ水题必备的利器?倘若果真如此,那我多少有些羡慕你,因为我至始至终都没有领悟动态规划的精髓。 自我阅读《算法导论》已久,我对书上给出的解决特定问题所用到的算法并无太多不明朗之处,而且在遇到相似的问题时,可以很快意识到自己熟知的某个算法能够高效的解决这个问题。但是我不太明朗的地方转载 2012-07-26 06:38:24 · 1068 阅读 · 0 评论 -
洗牌算法
几乎所有的程序员都写过类似于“洗牌”的算法,也就是将一个数组随机打乱后输出,虽然很简单,但是深入研究起来,这个小小的算法也是大有讲究。我在面试程序员的时候,就会经常让他们当场写一个洗牌的函数,从中可以观察到他们对于这个问题的理解和写程序的基本功。 在深入讨论之前,必须先定义出一个基本概念:究竟洗牌算法的本质是什么?也就是说,什么样的洗牌结果是“正确”的? 云风曾经有一篇转载 2012-06-27 10:35:09 · 660 阅读 · 0 评论 -
程序员必知8大排序3大查找(三)
前两篇《程序员必知8大排序3大查找(一)》《程序员必知8大排序3大查找(二)》三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈)一、顺序查找的基本思想:从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未转载 2012-05-18 22:38:47 · 565 阅读 · 0 评论 -
从B 树、B+ 树、B* 树谈到R 树
从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http://blog.csdn.net/v_JULY_v 。 第一节、B树、B+树、B*转载 2012-05-14 19:17:25 · 472 阅读 · 0 评论 -
求质数的其他方法
如果要求输出1~n之间的所有质数,需要注意如下几个方面:(1)2是质数,单独输出(2)只需测试奇数是否是质数(3)如何判断某个数x是否是质数,有如下几种方法:I. 测试x是否能被3~x/2的数整除,若没有能整除的,则为质数,否则不是质数II. 测试x是否能被3~sqrt(x)之间的数整除,若没有能整除的,则为质数,否则不是质数III. 测试x是否能被3~sqrt(x)之间的原创 2012-04-16 21:57:21 · 525 阅读 · 0 评论 -
程序员必知8大排序3大查找(二)
本文我们先把剩余的三大排序说完,然后讨论一下排序的稳定性问题,最后再总结一下排序的时间复杂度和空间复杂度。(1到5见上篇)6、快速排序 (1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。转载 2012-05-08 00:22:15 · 526 阅读 · 0 评论 -
九宫格与广度优先搜索
一、题目说明: (九宫问题)在一个3×3的九宫中有1-8这8个数及一个空格随机的摆放在其中的格子里,如图1-1所示。现在要求实现这个问题:将该九宫格调整为如图1-1右图所示的形式。调整的规则是:每次只能将与空格(上、下、或左、右)相邻的一个数字平移到空格中。试编程实现这一问题的求解。 (图1-1) 二、题目分析:转载 2012-05-05 23:07:42 · 2447 阅读 · 0 评论 -
程序员必知8大排序3大查找(一)
每天都在叫嚣自己会什么技术,什么框架,可否意识到你每天都在被这些新名词、新技术所迷惑,.NET、XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。 要编写出优秀的代码同样要扎实的基础,如转载 2012-05-04 21:49:58 · 467 阅读 · 0 评论 -
八种常用的排序算法
下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的。 插入排序①直接插入排序例:六个数12 15 9 20 6 31 24 用直接插入排序,如下图:思路:第一步:从给出的六个数中,随便拿出一个数,比如12,形成一个有序的数据序列(一个数当然是有序的数据序列了,不看12之外的数,就当其他的数不存在);第二步:从转载 2012-05-04 21:47:45 · 1493 阅读 · 0 评论 -
同时寻找最大数和最小数的最优算法
我们知道,在一个容量为n的数据集合中寻找一个最大数,不管用什么样的比较算法,至少要比较n-1次,就算是用竞标赛排序也得比较n-1次,否则你找到的就不能保证是最大的数。那么,在一个容量为n的数据集合中同时寻找最大数和最小数的最小比较次数是多少呢? 从一个容量为n的数据集合中同时找到最大数和最小数的最优方法是:首先让所有的元素参与两两比较,这样总共比较了n/2次,最大数肯定在胜者组中,最小转载 2012-05-02 16:35:20 · 1199 阅读 · 0 评论 -
书写strcpy的源码
strcpy的原型是char *strcpy(char *dest,const char *src);源代码:char *strcpy(char *dest, const char *src){if (dest == NULL || src == NULL){return NULL;}char *dest_str = dest;while ((*de原创 2012-04-16 16:37:24 · 518 阅读 · 0 评论 -
洗牌算法
待续原创 2012-04-12 15:18:37 · 351 阅读 · 0 评论 -
常用和式
1)1+2+3+......+n=n(n+1)÷2 2)1^2+2^2+3^2+......+n^2=n(n+1)(2n+1)÷6 3) 1^3+2^3+3^3+......+n^3=( 1+2+3+......+n)^2 =n^2*(n+1)^2÷4 4) 1*2+2*3+3*4+......+n(n+1) =n(n+1)(n+2)÷3 5) 1*2转载 2012-08-01 15:43:43 · 781 阅读 · 0 评论