位图
摘要:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 40亿个无符号整数加载在内存中大约占空间 4G,但用位图,如果内存够的话,40亿个整型使用位图存储需要500M左右的空间 位图结构:一个数组的每一个二进制位表示一个数据,0表示数据不存在,1表示数据存
阅读全文
posted @
2016-07-10 22:26
My_Blog_Days
阅读(145)
推荐(0)
哈夫曼(Huffman)树及其应用
摘要:Huffman树又称最优树,是一类带权路径长度最短的树,带权路径长度为从该节点到树根之间的路径长度与节点上权值的成积。 那么如何构建一个Huffman树呢?就需要Huffman算法 1、利用给定的n个权值构成有n个二叉树的集合F,每个二叉树就只有一个带权值的根节点,其左右子树都为空。 2、选取两课根
阅读全文
posted @
2016-06-28 22:49
My_Blog_Days
阅读(1740)
推荐(0)
堆和堆排序
摘要:堆的定义如下:n个元素的序列(K1,K2......Kn)当且仅当满足Ki<=K2i&&Ki<=K2i或Ki>=K2i&&Ki>=K2i(i=1,2,3,...n/2)时称之为堆 以一维数组作为堆的存储结构,堆可以看成一个完全二叉树。 最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩
阅读全文
posted @
2016-06-27 22:45
My_Blog_Days
阅读(271)
推荐(0)
二叉树的线索化
摘要:遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列即是对一个非线性结构进行线性化操作,使除第一个和最后一个节点外,每一个节点有且只有一个直接前驱,直接后继 二叉树作为存储结构只能找到节点的左孩子右孩子信息,而不能直接得到结点在任一序列中的前驱和后继,这种信息只有在遍历的动态过程中可以看到。 二叉
阅读全文
posted @
2016-06-25 23:51
My_Blog_Days
阅读(3426)
推荐(1)
二叉树存储及遍历
摘要:1、树的存储: 二叉树的存储:1、数组存储(此方法适合完全二叉树的存储) 2、链表存储(可分为二叉链表,三叉链表)结构如下: 2、 使用二叉链表实现二叉树 测试用例: int a[10] = { 1, 2, '#', '#', 3, 4, '#', '#', 5, 6 };//其中用'表示空' 按前
阅读全文
posted @
2016-06-19 17:26
My_Blog_Days
阅读(2394)
推荐(0)
数据结构一栈和队列(2)
摘要:1、两个栈实现一个队列,实现在队列尾部插入节点,在队列头部删除节点。 若为入队列则进stack1,若要出队列可分2种情况:a、若stack2为空,根据栈先进后出的特性应该先将stack1的元素pop出,进stack2。b、若 stack2不为空,可以说明stack2是前几次操作由stack1出栈的元
阅读全文
posted @
2016-06-11 13:49
My_Blog_Days
阅读(337)
推荐(0)
数据结构一栈和队列(1)
摘要:一、栈的定义--Stack栈只允许在末端进行插入和删除的线性表。栈具有后进先出的特性(LIFO,Last In First Out) 栈的应用举例: 1、数制转换例(十进制 》八进制) 2、括号匹配的检验 设置一个栈,若是左括号压入栈顶,使原来在栈中的未匹配的括号的优先级自然降了一级,若是右括号有两
阅读全文
posted @
2016-06-09 17:28
My_Blog_Days
阅读(187)
推荐(0)
数据结构一链表
摘要:无头节点的单链表 链表是一种线性表,但是并不是顺序存储,而是每个节点里面存储着下一个节点的指针,把存储数据元素的数据串链起来。 链表和顺序表的优缺点 1>.顺序表支持随机访问,单链表不支持随机访问 2>.顺序表插入/删除数据效率很低时间复杂度为0(N);除尾插尾删效率高,时间复杂度为0(1) 3>.
阅读全文
posted @
2016-06-07 14:53
My_Blog_Days
阅读(253)
推荐(0)
快速排序
摘要:基本思想: 1)选择一个关键字,通常选择最后一个元素, 2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比关键字值小。另一部分记录的 元素值比关键字的值大。 3)此时关键字在其排好序后的正确位置 4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。 分析:
阅读全文
posted @
2016-05-22 18:43
My_Blog_Days
阅读(186)
推荐(0)
归并排序的实现(内部)以及应用场景(外部)
摘要:归并排序既可以进行内部排序也可以进行外部排序。归并排序的时间复杂度O(N*lgN),空间复杂度为O(N) 在这种情况下可以使用外部归并排序: 若外存中还有N个文件记录,不能一次性读入内存,可以将外存中的文件记录分成若干长度为L的可以读进内存的段,并依次读入内存进行内部排序,将有序子文件(归并段)重新
阅读全文
posted @
2016-04-11 12:47
My_Blog_Days
阅读(3176)
推荐(0)