2012年10月18日

摘要: 十二、为了count的最终胜利 在介绍完最基本的堆栈模型之后,下面要继续的是第二种最基本的模型,队列。队列,在现实生活中经常可以看到(不过考虑到在我国大部分人都不排队的事实,可能还真不是能经常看到),计算机最开始需要这样一个模型是为了解决在计算机的初期,放入计算机执行的作业排队的问题。现在队列同样也在计算机中有着广泛的应用,windows的消息队列,操作系统进行调度的作业等等,和堆栈一样,基础的东西往往在构成庞大系统中发挥着重要的作用。 先来介绍一下队列的模型的概念,如果你看到现实生活中的队列能抽象出什么特点?数学家和一般人差别就是他们能够从任何常见的事物中抽象出模型,然后用数字公式描绘他们, 阅读全文
posted @ 2012-10-18 10:15 一心一怿 阅读(1670) 评论(2) 推荐(1) 编辑

2012年10月10日

摘要: 十一、不能被应用的理论不是好研究 前面介绍了堆栈的一些小小的理论模型,那么这样一个东西有什么作用呢?实际中不可能有那么一辆停在站台前方堵死的火车的,即使有,也不需要用什么计算机的数据结构模拟。如果一个理论没有其运用价值那么它的归宿只能是慢慢被人淡忘,但是也有个别例外的,比如线性代数在发明之时被认为毫无用武之地,但是在很多年后线性代数成为了量子力学的数学技术,乃至现在信息科学的数学基础,相比这个例子,没有找到用武之地而最终被人遗忘与沙海的理论还是占了绝大多数,所以,说了这么多,在编码这种实际操作性强的事物上你能学到的大部分理论模型能展现在你的面前,都说明这些理论在实践中已经有了很广泛的应用,并且 阅读全文
posted @ 2012-10-10 16:28 一心一怿 阅读(1718) 评论(3) 推荐(0) 编辑

2012年10月8日

摘要: 十、装配火车的乐趣 国庆放假结束了,第一天真是不想来上班啊,接着国庆之前的吧,上一篇写的是利用数组实现堆栈的结构,使用数组的两个致命的弱点是大小必须在使用前指定和效率非常差。那么先前的大牛们就开始思考如何提高效率呢?而在C/C++语言里有一种可以直接操作内存的东西叫做指针并且可以动态指定大小,于是不得不让人思考怎么样利用指针来克服原有的弱点重新实现数据结构。 在使用指针实现之前,先看看数组为什么能实现堆栈等类似的结构,首先,一个数组可以通过下标来进行遍历,也就是说可以让我们从一个元素寻访到下一个元素或者某一个元素,第二个,数组可以包含元素。那么我们需要用指针也构造出具有这样两个特点的一个结构出 阅读全文
posted @ 2012-10-08 08:46 一心一怿 阅读(2575) 评论(1) 推荐(3) 编辑

2012年9月29日

摘要: 八、数据结构不一定很枯燥 正如我现在实习的公司的一个同事说的那样,数据结构是一本催眠的书,我想对于大多数人应该是这样的,当然对我也是,看着一大堆的算法,结构模型,不想睡觉那应该可以归结为geek一类的,但是呢,后来我找到了一个办法,就是动手,我发现无论看的时候有多无聊,写写程序所带来的那种兴奋感和成就感现在已经成为了支撑看完我一本书的精神动力,所以我想在我开始从堆栈到图的过程中,我尽我所能让所写的程序有更大的互动性,由于我的目的是能够让一些初学者对于编程写代码更感兴趣,而且我这水平也只能给初学者提供一点我以前学习的经验了,我本来想用MFC,用图形化界面来增加交互性的,后来我发现对于一个没有学过 阅读全文
posted @ 2012-09-29 09:20 一心一怿 阅读(2261) 评论(4) 推荐(0) 编辑

2012年9月27日

摘要: 七、骚年,这就是你的终极速度了吗? 在介绍了前面的几个排序算法之后,这一次我准备写写快速排序,快速排序之所以叫快速排序是因为它很快,它是已知实践中最快的排序算法(不过曾经我看过一个叫google的位图排序算法,传说能更快,但从那以后我再也没有找到过相关的资料了,所以说江湖小报上的消息还是不要信的比较好),它的平均运行时间能达到O(NLOGN),而且在绝大部分情况下很容易达到这个时间界。 快速排序算法过程分为如下几步: 1.如果数列中的元素只有0个或者1个,那么算法结束, 2.在待排序数列中任意选取一个数,记为p好了, 3.将剩下的元素划分成两个子序列,一个子序列里面的数全部比p小,另一个全部比 阅读全文
posted @ 2012-09-27 13:02 一心一怿 阅读(2424) 评论(2) 推荐(1) 编辑

2012年9月26日

摘要: 五、如何递,怎样归? 很多人看完递归的原理之后会有这种感觉,喔,这个原理我懂了,然后再找一道其余的题目看一看能不能写的出来,突然发现,我勒个去,还是不会。其实这种现象很普遍,所以如果你是这种的,也没有什么好沮丧的,我敢保证你能看的懂递归的执行过程,基本上已经比30%的人要强了。所以我觉得,我写一写我对递归思维的理解好了。递归这个词我的理解应该是传递和回归,如何把自身的状态传递下去和如何回归到一个结果上是递归问题的基本思维方式。 所谓如何传递,我觉得思维的难点是如何抽象出数学模型,如果是斐波那契数列那种有明确公式的话,很简单,直接按照公式该怎么操作怎么操作,难得是只有叙述性语言的,比如这种题目. 阅读全文
posted @ 2012-09-26 16:34 一心一怿 阅读(2107) 评论(9) 推荐(3) 编辑

2012年9月25日

摘要: 三、对于效率提高的初次尝试 对于最自然的几种排序算法,数学家们开始思考如何提高排序算法的效率,可以通过数学证明出来如果想达到这个目的,必须想办法将相距较远的元素进行交换,具体原理涉及到比较一定的数学证明,因为我不是学数学出生的,所以我不能完整严谨的写出这个证明,所以,套用一句俗话吧,如果感兴趣你可以自己查阅一下资料。 希尔排序是以其发明人Shell的名字命名的。这里有个故事就是在一些书上,这个算法被称作是Shell-Metzner排序法,但是呢,这个叫做Metzner的人说“我没有为这种算法做任何事,我的名字不应该出现在算法的名字中。”有没有瞬间觉得这个Metzner实在是太伟大了?特别是在现 阅读全文
posted @ 2012-09-25 09:48 一心一怿 阅读(2554) 评论(3) 推荐(1) 编辑

2012年9月23日

摘要: 周末开始更新了,首先感谢各位对我写的东西还能保持兴趣,先回答几个留言中的一个问题和我对无损编码那一节的一个留言的一个看法,第一个是推荐算法书,首先,我不是什么高手和大牛,所以当不起“推荐”这个词。我见过很多人,对于这个问题我觉得很多人都会说出《算法导论》,但是我不完全这么认为,我始终认为人和人是不一样的,《算法导论》肯定是一本经典的书,但是学习知识的目的是要学懂,比谁的能力大不是比谁看的经典书籍多,而是比谁懂得多。所以如果让我推荐的话,我觉得要分三种情况,第一种,你有很深的数学基础,高中特别喜欢做数学题,我觉得可以尝试看看《算法导论》甚至是传说中的《计算机程序设计艺术》,第二种就是高中并不对. 阅读全文
posted @ 2012-09-23 10:31 一心一怿 阅读(3058) 评论(3) 推荐(8) 编辑

2012年9月18日

摘要: 无损编码的霍夫曼编码以及其余的各种编码由于要使用比较复杂的数据结构,所以按照我昨天说的,我决定从数据结构开始写起。数据结构和算法很难完全的分开,好的数据结构能够提升算法的效率,而如果没有算法,单纯的谈数据结构,那么数据结构的应用价值就会大大的降低。那么,就从最基本的开始这一个系列吧。一、总是让人很抽象的算法分析 算法分析基本是所有数据结构与算法的第一章要讲的内容,大0表示法什么的总是让人很抽象,对于初学者,其实这一章的意义并不是很大,因为你很遇到在实际开发中一些大数据集的问题,在小规模数据的时候,各个算法之间的差别很难分辨出来。这就好比计算5个数的和,大家所用的时间基本都会差不多,但是要是计. 阅读全文
posted @ 2012-09-18 16:42 一心一怿 阅读(2591) 评论(6) 推荐(2) 编辑

2012年9月17日

摘要: 上个月项目荷兰大佬要检查,搞的我想写的东西不断推迟,现在检查完了,我决定继续把我想写的这整个一个系列写完,上一次写的是最简单的无损编码行程编码,这一次我想要写的是算术编码。这种编码的原理就是用一个数来代替一组数,我第一次看这个思想的时候深深的被这些大牛的思维方式所折服,用一个数代替一组数,这其实就是压缩的最基本思想,虽然看起来是那么的遥不可及,但是在这种大的思想的指引下,总能开创出接近于完美的方法,所以我一直觉得一个人敢想,有主意,无论这个主意多么的不靠谱,都是应该的,因为你总能从一定的想法中找到合适的启发,可惜的是,经过这么多年的教育,我经常都感觉自己的思想根本跳不出某一个圈子,很难获得一. 阅读全文
posted @ 2012-09-17 20:30 一心一怿 阅读(2928) 评论(9) 推荐(4) 编辑

导航