数据结构与算法
文章平均质量分 63
雯雯要加油
计算机研究生,数据挖掘与机器学习
展开
-
找一个数组中的主元素
问题:在一个规模为N的数组array[N]中,所谓主元素就是出现次数大于N/2的元素,例如 3.3.4.2.4.4.2.4.4 有一个主元素为4。 给出一个算法,如果过半元素存在,就找出来,否则给出报告,要求给出O(N)的算法。 常规想法转载 2014-09-18 14:54:53 · 805 阅读 · 0 评论 -
查找算法总结(二)
接下来的几种算法属于动态查找结构三、二叉查找树: 特点: 1、如果它的左子树不空,那么左子树上的所有结点值均小于它的根结点值; 2、如果它的右子树不空,那么右子树上的所有结点值均大于它的根结点值; 3、它的左右子树也分别为二叉查找树。二叉查找树的插入和删除都非常的方便,很好的解决了折半查找添加删转载 2014-09-18 15:06:35 · 413 阅读 · 0 评论 -
归并排序 笔试面试手写代码常考
归并排序是将两个或者两个以上的有序序列进行合并的一种排序算法。采用了分治的思想。它的主要思路是将序列分为两个子序列,对于两个最终有序的子序列进行合并,得到有序的整体序列。如何保证子序列有序呢?对子序列采用同样的方式进行划分,当子序列长度为1时,子序列有序,此时合并相邻的子序列。层层返回,不断地进行合并,最终完整的序列就是一个有序的序列。归并排序可以很清晰地以递归的方转载 2014-09-14 12:19:56 · 493 阅读 · 0 评论 -
快速排序 改进快排的方法
快速排序法事应用最广泛的排序算法之一,最佳情况下时间复杂度是 O(nlogn)。但是最坏情况下可能达到O(n^2)。说明快速排序达到最坏情况的原因。并提出改善方案并实现之。答:改进方案:改进选取枢轴的方法1、选取随机数作为枢轴。但是随机数的生成本身是一种代价,根本减少不了算法其余部分的平均运行时间。2、使用左端,右端和中心的中值做为枢轴元。经验得知,转载 2014-09-14 12:17:23 · 723 阅读 · 0 评论 -
[C/C++程序员面试宝典] 程序员面试宝典(20)-最长公共子串
题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。转载 2014-09-12 21:18:58 · 690 阅读 · 0 评论 -
稳定与不稳定排序
这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相转载 2014-09-11 21:32:10 · 325 阅读 · 0 评论 -
简单查找与折半查找
各种基本算法实现小结(六)—— 查找算法(均已测试通过)=================================================================== 1、简单查找在一组无序数列中,查找特定某个数值,并返回其位置pos测试环境:VC 6.0 (C)[cpp] view plainco转载 2014-09-18 15:00:08 · 472 阅读 · 0 评论 -
查找算法
静态查找结构主要有两种:顺序查找、折半查找一、顺序查找:这个就不用说了,一个一个的差吧,很差劲的算法了,时间复杂度是O(n) public int shunXuSearch( int[] b, int c) { for ( int i = 0; i length; i++) { if (b[i转载 2014-09-18 14:56:00 · 422 阅读 · 0 评论 -
查找算法总结(三)
六、多路查找树、B~树、B+树 B树一种多路查找树(维基百科中定义):存储排序数据并允许以O(log n)的运行时间进行查找,顺序读取,插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。也可以说是 B- 或 B~树。 术语B树可以指一个特定的方案,也可以指大体上一类方案。狭义上,一个B树在它内部节点中存储键值,但不需在叶子节点上存储这些转载 2014-09-18 15:07:52 · 424 阅读 · 0 评论 -
给定一个有序数组,元素各不相同且升序排列,创建一个高度最小的二叉查找树
要创建一个高度最小的二叉查找树,就必须让左右子树的节点数量越接近越好。要让数组的中间的值成为根节点。数组左边的一半成为左子树,右边一半成为右子树。struct Node { int value; Node *left; Node *right; }; void createTree(int a[], int begin, int end, Node* &原创 2015-09-30 09:54:51 · 957 阅读 · 0 评论