随笔分类 -  数据结构与算法

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