随笔分类 - 数据结构与算法
摘要:参考文档: simhash算法原理及实现:https://blog.csdn.net/chenguolinblog/article/details/50830948
阅读全文
摘要:1、喝汽水问题。每7个汽水瓶可以换一瓶汽水,输入为n瓶汽水,求得最后能喝到多少瓶汽水 public static int count(int n){ return n+emptyCount(n); } public static int emptyCount(int m) { int empty;
阅读全文
摘要:原理: 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕 每一趟排序获得最小数的方法: for循环进行比较,定义一个第三个变量temp,首先前两个数比较,把较小的数放在temp中,然后用temp再去跟剩下的数据比较,如果出现比temp小的数据,就用它代替temp
阅读全文
摘要:冒泡排序:http://www.cnblogs.com/amei0/p/8259881.html 快速排序:http://www.cnblogs.com/amei0/p/8259919.html 希尔排序:http://www.cnblogs.com/amei0/p/8295892.html 直接插
阅读全文
摘要:什么是波兰表达式 早在1920年,波兰科学家扬·武卡谢维奇就发明了一种不需要括号的表示法,可以用来表示一个计算表达式。即将操作符号写在操作数之前,也就是前缀表达式,即波兰式(Polish Notation, PN)。这种表达式直到1960年计算机出现后才发挥出其威力 比如2 + 3 * (5 - 1
阅读全文
摘要:参考文档: avl树:http://lib.csdn.net/article/datastructure/9204 avl树:http://blog.csdn.net/javazejian/article/details/53892797 红黑树:http://daoluan.net/%E6%95%
阅读全文
摘要:一、求所有子数组的和的最大值 public static void main(String[] args) { int[] a = { 1, -2, 3, 10, -4, 7, 2, -5 }; FindMaxSubAry(a); } public static void FindMaxSubAry
阅读全文
摘要:参考文章: 判断链表是否相交:http://treemanfm.iteye.com/blog/2044196 一、单链表反转 链表节点 public class Node { private int record; private Node nextNode; public Node(int rec
阅读全文
摘要:问题:1亿数据中,找出最大的k个数,要求使用内存不超过1m (延伸问题:1亿数据中,找出重复出现次数最多的k个,要求使用内存不超过1m 等) 分析: 1亿数字(int)占内存:100000000 * 4byte / 1024 / 1024 =381m 其中 int=4byte,1m=1024kb,1
阅读全文
摘要:参考文档: https://www.cnblogs.com/skywang12345/p/3597597.html 算法描述: 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希
阅读全文
摘要:算法描述: 在已知数据的范围的条件下,创建若干个桶,根据相应的比较规则将待排数据落入各个对应的桶中,最后扫描 桶 来实现排序。 代码实现: 算法分析(数组长度n,桶的个数m): 时间复杂度: 平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM)。如果相对于同样的N,桶数量M越大,其
阅读全文
摘要:基本思想: 说明:元素必须是有序的,如果是无序的则要先进行排序操作。 也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表
阅读全文
摘要:参考文章: 算法描述: 对于给定的一个数组,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止 代码实现: 算法分析: 时间复杂度:O(n2) 最好O(n) 最坏O(n2)
阅读全文
摘要:参考文章: https://www.cnblogs.com/chengxiao/p/6129630.html 堆排序: 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序 堆具有以下性质: 是完全二叉树:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到
阅读全文
摘要:参考文档 https://www.cnblogs.com/chengxiao/p/6194356.html 原理: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求
阅读全文
摘要:参考文档 快排的递归实现&非递归实现:http://blog.csdn.net/mine_song/article/details/64121553 三种快排及四种优化方式:http://blog.csdn.net/hacker00011000/article/details/52176100 尾递
阅读全文
摘要:参考文章: 冒泡排序(Bubble Sort)原理:依次比较两个相邻的元素,将值大的元素交换至右端。首先比较第1个和第2个数,将小数放前,大数放后。以此类推。直至全部排序完成。N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次。这个算法的名字由来是因为越小的元素会经由交换慢慢“
阅读全文
摘要:n级台阶,一次可登1级或2级,问共有多少种不同的走法? 分析: 如果用n表示台阶的级数,a n表示某人走到第n级台阶时,所有可能不同的走法,容易得到:(1)根据题意得: 当n=1时,显然只要1种跨法,即a1=1. 当n=2时,可以一步一级跨,也可以一步跨二级上楼, 因此,共有2种不同的跨法,即a2=
阅读全文
摘要:stack为ADT中的一种数据结构,该结构特点是先进后出,Stack继承了Vector,Vector继承了AbstractList类,由此可见Stack也是集合。他的实现方法一般有两种: 一种为单链表(node只有一个next指针的LinkedList),另一种是是数组。jdk中是以数组实现的。 1
阅读全文

浙公网安备 33010602011771号