2011-08-10 09:13 by zabery, 119 visits, 网摘, 收藏, 编辑
摘要:前言本文内容主要是 寻找最大最小值,寻找第i小值,以及随机函数的改写。在一个大小为n的集合里面,第i个顺序统计量是指该集合中第i小的元素。寻找最大最小值普遍算法是遍历数组,设置max和min存储最大最小值。每个元素都与max和min比较,然后分别改变max和min的值(如果需要改变的话)。如此算来该算法需要进行比较的次数为2n次。那么如果想缩短比较的次数该肿么办呢?假设数组A的长度为奇数,max = min = A[0],然后A[1]…..A[n-1]一共n-1个(偶数个)元素。每次取两个元素比较,将比较后的较大值与max比较,将较小值与min比较,然后相应的修改max和min值,一共比较三次
阅读全文
2011-08-09 16:29 by zabery, 48 visits, 网摘, 收藏, 编辑
摘要:前言比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出,而如果存放在奇地址开始的地方,就可能会需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该int数据。数据对齐(Data Alignment) 这个要求可以提高存储器系统的性能,减少寻址次数,代价是浪费了一些空间。换句话说是用相对廉价的空间换得时间。数据对齐在我计算机上的各基本类型的所占字节数如下:有结构体A如下: 1: struct A 2: { 3: int i; 4: double d; 5: char c; 6: short s; 7: };数据对
阅读全文
2011-07-30 18:44 by zabery, 66 visits, 网摘, 收藏, 编辑
摘要:前言 插入,快速,合并,堆排序等基于比较的排序算法的最坏情况下界为Ω(nlogn),最坏情况下都要进行Ω(nlogn)次比较。假设有一n个元素组成的数组(假设每个元素都不相等),那么一共有n!排列组合,而且这n!排列组合结果都应该在决策树的叶子节点上(如图1),在图1中n = 3,所以有3! = 6种组合全都在决策树的叶子节点,对于高度为h的二叉树,叶子节点的个数最多为2h (当为满二叉树时为2h...
阅读全文
2011-07-27 14:35 by zabery, 550 visits, 网摘, 收藏, 编辑
摘要:前言 快速排序的平均情况下是O(nlogn),但是一般都比其他运行时间为O(nlogn)的算法都要快,因为它隐藏的常数因子比较小,但是在最坏情况之下,快速排序的运行时间是O(n2)。 快速排序过程 快速排序采用的思想是分治思想,就像合并排序算法的思想一样,合并排序算法是从数组的中间开始分治,直到分为N个分组,最后分别合并N个分组的解。如下图,有原始数组A = {1, 3, 4, 5, 7, 2, ...
阅读全文
2011-07-26 13:18 by zabery, 424 visits, 网摘, 收藏, 编辑
摘要:前言记得在学习数据结构的时候一味的想用代码实现算法,重视的是写出来的代码有一个正确的输入,然后有一个正确的输出,那么就很满足了。从网上看了许多的代码,看了之后貌似懂了,自己写完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次写出正确的代码,也许在第一次写的时候是因为参考了别人的代码,看过之后大脑可以进行短暂的高清晰记忆,于是欺骗了我,以为自己写出来的,满足了成就感。可是代码是计算机识别的,而我们更喜欢文字,图像。所以我们在学习算法的时候要注重算法的原理以及算法的分析,用文字,图像表达出来,然后当需要用的时候再将文字转换为代码。记忆分为三个
阅读全文
2011-07-20 18:28 by zabery, 62 visits, 网摘, 收藏, 编辑
摘要:思考是归类分组的过程。设想一下我们所有学过的知识为什么到真正用到的时候却始终想不起来了呢?因为学过的知识因为缺少归类分组,所以在大脑中杂乱无章,当需要用的时候,大脑检索时需要耗费太多的时间和精力,最后可能导致死机。学过计算机的都知道数据库有数据库管理系统,方便数据的管理和查询。而我们的大脑也是存储数据的,那我们如果能够创建一个“大脑数据管理系统”出来,那在记忆和使用学过的知识的时候就方便多了。“...
阅读全文
2011-07-19 20:13 by zabery, 146 visits, 网摘, 收藏, 编辑
摘要:前言在学习计算机算法时,知道插入排序的时间复杂度是O(n2),那O记号到底是什么意思呢?本文主要介绍几个算法分析时用到的记号。大O记号定义:O(g(n)) = { f(n) : 存在正常数c和n0 ,使对所有的n >= n0,都有 0 <= f(n) <= cg(n) }。大O记号给出函数的渐进上界。, 则可以表示为 f(n) = O(n2)。证明:要使得 0 <= f(n) <= cg(n)存在c = 9/2 ,n0 = 1,使得对所有的n >= n0都有 0 <= f(n) <= cg(n)。O(g(n) 以及后面讲到的记号表示的都是集合,而
阅读全文
2011-07-15 11:04 by zabery, 47 visits, 网摘, 收藏, 编辑
摘要:用例图中由四个部分组成:角色,关系,用例以及系统。拿网站系统为例:角色:游客,注册用户,管理员等;关系:包含(include),扩展(extend),泛化(generalization);用例:角色能够完成的任务(功能);系统:整体系统,子系统。介绍三种关系的不同:包含:当两个或者多个用例具有相同子用例的时候,就将子用例独立出来,比如 两个用例 发贴和回帖,它们具有相同的子用例----登录,所以可以将登录独立出来图1因为子用例是从基用例独立出来的,所以基用例单独不能执行,必须得将子用例和基用例结合起来才可以。扩展:基用例无需知道子用例是什么,即子用例对基用例没有影响,所以基用例可以单独执行。比
阅读全文
2011-04-24 11:00 by zabery, 77 visits, 网摘, 收藏, 编辑
摘要:大四最后一个学期打着 做毕业设计的旗号玩转了2个多月,下午打球,晚上实战三国杀,难得上午闲暇时间偶尔跑到图书馆借本书,看本书。一直都比较抵触中国许多的技术书籍,对于XX教授所写的书有点反感,感觉教条主义太重,但是却不得不看,因为都是我们的教材,考试都是考的上面的知识,一本书 也就是期末考试前三天看看,或者叫做潜意识记忆吧,只要熬过考试就ok了,咱们挂不起科,伤不起啊!!! 最近看了一本《代码揭...
阅读全文
2010-08-17 21:49 by zabery, 79 visits, 网摘, 收藏, 编辑
摘要:首先什么是算法?想想自己写过的算法,简单一点的,冒泡排序,插入排序等等。回忆一下,输入乱序的集合(当然要确保输入的规范性,不能造成溢出,或者其他异常),然后经过传参给函数BubbleSort,最后输出一个排好序的集合;貌似这样就完了,但是要注意的是,在有限的时间内输入合乎要求的输出。 总结归纳一下:对于符合一定规范的输入,在有限时间给出合乎要求的输出。能实现这种要求的函数或过程就是算法。 ...
阅读全文