摘要: 邻接表邻接矩阵用二维数组即可存取,比较简单,但除完全图外,一般的图不是任意两个顶点都相邻接,因此邻接矩阵也有很多零元素,特别是当n较大而边数相对完全图的边(n-1)又少得多时,邻接矩阵仍是很稀疏,这样浪费存储空间。邻接表(AdjacencyList)是图的一种顺序存储与链式存储结合的存储方法,类似于树的孩子链表表示法。由于它只考虑非零元素,因而节省了零元素所占的存储空间。它对于无向图和有向图都适用。邻接表示法就是对于图G中的每个顶点放到一个数组中,数组的每个元素存放一个结点并指向一个单链表的指针。链表中存储着与该顶点相邻接的顶点所在的数组元素的下标。在邻接表表示中有两种结点结构,如图6-9所示 阅读全文
posted @ 2012-09-15 16:59 大兔子_快跑 阅读(1149) 评论(0) 推荐(0)
摘要: 文章作者:Slyar文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。等价关系与等价类从数学上看,等价类是一个对象(或成员)的集合,在此集合中的所有对象应满足等价关系。若用符号"≡"表示集合上的等价关系,那么对于该集合中的任意对象x,y, z,下列性质成立:1、自反性:x ≡ x2、对称性:若 x ≡ y 则 y ≡ x3、传递性:若 x ≡ y 且 y ≡ z 则 x ≡ z因此,等价关系是集合上的一个自反、对称、传递的关系。通过金属线连接起来的电器的连通性,就是一种等价关系。这种关系显然具有自反性,因为任何一个器件都是与自身连通的;如 阅读全文
posted @ 2012-09-14 11:20 大兔子_快跑 阅读(1781) 评论(0) 推荐(0)
摘要: 2013华为校园招聘机试题(杭州)连接来自:http://blog.chinaunix.net/uid-26868581-id-3334342.html/*题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串 lInputLen: 输... 阅读全文
posted @ 2012-09-12 20:53 大兔子_快跑 阅读(3495) 评论(0) 推荐(0)
摘要: 从上一章的问题:生成[0, maxval]范围内m个随机整数的有序序列,不允许重复。实现伪代码:initialize set S to emptysize = 0while size < m do t = bigrand() %d maxval if t is not in S insert t into S size ++print the elements of S in sorted order将生成的数据结构称为IntSet,指整数集合S。接口定义如下: 1 //Intset.h 接口定义头文件 2 typedef int bool; 3 #define true 0 ... 阅读全文
posted @ 2012-09-04 23:03 大兔子_快跑 阅读(396) 评论(0) 推荐(0)
摘要: 问题描述:一个具有n个浮点数字的数组x,目标是要找到之中连在一起的数组元素中找到最大和。例如如果输入的数组是以下这十个元素:31 -41 59 26 -53 58 97 -93 -23 84那么程序应该返回从59到97的综合,也就是187。第一个算法迭代了所有满足 0 ≤ i ≤ j < n 的 i 和 j 整数对,分别计算总和,最终找到综合最大的组合。问题定义: 具有n个浮点数的向量x,求出输入向量的任何连续子向量的最大和。最初的算法(算法1):遍历长度为n向量的所有的非空子向量,总共有n + (n - 1) + (n - 2) + ... + 1 = (n^2 + n)/2。所以算法复杂度 阅读全文
posted @ 2012-09-01 17:05 大兔子_快跑 阅读(752) 评论(0) 推荐(0)
摘要: 位图排序是一种效率极高(复杂度可达O(n))并且很节省空间的一种排序方法,但是这种排序方法对输入的数据是有比较严格的要求(数据不能重复,大致知道数据的范围)。位图排序即利用位图或者位向量来表示集合。举个例子,假如有一个集合{3,5,7,8,2,1},我们可以用一个8位的二进制向量set[1-8]来表示该集合,如果数据存在,则将set相对应的二进制位置1,否则置0.根据给出的集合得到的set为{1,1,1,0,1,0,1,1},然后再根据set集合的值输出对应的下标即可得到集合{3,5,7,8,2,1}的排序结果。这个就是位图排序的原理。一.位图排序的应用: 1.给40亿个不重复的unsigne 阅读全文
posted @ 2012-08-26 16:53 大兔子_快跑 阅读(2686) 评论(0) 推荐(0)
摘要: http://dev.firnow.com/course/3_program/c++/cppjs/20090524/167795.html若规定最后取光石头的人输,又该如何应对呢(还有必胜的策略么?)?仍然用<1,1,1,1>这种形式来表示石头.仍然是你先取.如果是1块,你必输.如果是2块,你赢.你可以在边角取走一块,然后便成为:这时候只剩1块石头,对手先取.这样就成1块石头的情况,结果当然是对手输如果是3块,你赢.你可以在边角取走两块,然后便成为:这时候只剩1块石头,对手先取.......如果是4块,你必输.石头是<1,1,1,1>.如果你从边角取走一块或相邻两块,那 阅读全文
posted @ 2012-06-19 21:22 大兔子_快跑 阅读(400) 评论(0) 推荐(0)
摘要: 8.2-2 证明COUNTING-SORT是稳定的。 问题解答: 假设输入数组A[1...n],length[A]=n,数组A中有两个元素具有相同的值,下标分别为a,b(1≤a<b≤n)即A[a] = A[b]。经过计数排序运行至行7,C[A[a]] = C[A[b]]。在第9~11行中循环部分中,循环变量 i用于指示数组A的下标,其值从 length[A] 到 1 递减遍历。由b>a可知,A[b]优先插入数组B中。在循环执行体行10、行11中,每当将一个值A[i]放入数组B位置C[A[i]]时,都要使C[A[i]]的值减1。因此,A[b]首先插入数组输出数组B中,且A[a]插入在 阅读全文
posted @ 2012-06-16 14:51 大兔子_快跑 阅读(2914) 评论(6) 推荐(0)
摘要: 7.2-4 银行经常按照交易时间,来记录有关某一账户的交易情况,但是,很多人喜欢按照票据号来收到其银行对账单。因此,如何将按交易时间排序转换成按支票编号来排序,就成为一个对几乎排好序的输入进行排序的问题。证明在这个问题上,过程INSERT-SORT的性能往往优于过程QUIKSORT。 问题解析:对于QUIKSORT来说,输入一个已排序的数组属于最坏的情况,则每次区间划分都是最大程度的不对称。其算法运行的递归时间为T(n) = T(n-1) + Θ(n), 算法时间复杂度为Θ(n^2); 而对INSERT-SORT来说,输入一个已排序的数组却属于最佳的情况,算法时间复杂度为O(n)。也就是说当. 阅读全文
posted @ 2012-06-08 10:29 大兔子_快跑 阅读(2728) 评论(0) 推荐(0)
摘要: 6.5-7 Heap-DELETE(A, i)操作结点i中的项从堆A中删去。对含n个元素的最大堆,请给出时间为O(lgn)的HEAP-DELETE的实现。 Heap-DELETE(A, i) del_val←A[i] ifi = heap-size[A] thenheap-size[A]← heap-size - 1 returndel_val HEAP-INCREASE-KEY(A, i, key) HEAP-EXTRACT-MAX(A) returndel_val6.5-8请给出一下时间为O(n*lgk),用来将 k 个已排序链表合并为一个排序链表... 阅读全文
posted @ 2012-06-02 11:27 大兔子_快跑 阅读(1469) 评论(0) 推荐(0)