算法知识
krauser1991
逆水行舟 不进则退
展开
-
二分法
二分法必须操作有序的元素列表 最多查询log2N次 /** * @author: krauser * @date: Create in 下午6:13 2017/12/27 * @Description: 二分法 最多查询次数log2N次 * log((double)N)/log((double)m) */ public class DichotomyTest { /**原创 2017-12-27 18:31:52 · 224 阅读 · 0 评论 -
数组和链表的理解和运行时间分析
说一下存储数据的二种基本方式:数组和链表 内存结构: 数组和链表的原理: 数组会先在内存中分配空间,插入和删除元素,都会造成其它元素的重新排列,当然插入元素可以通过预留空间来处理,但是这样会造成内存的浪费,如果预留空间不够,你还是需要重新分配空间。 链表会在内存中存入元素和指向下一个存储内存的地址,可以分布在内存任意地址。 运行时间的差异: 数组的运行时原创 2017-12-27 19:55:55 · 776 阅读 · 0 评论 -
选择排序
选择排序每次查找元素的最大值/最小值。 运行时间是n*n-1*n-2...*2*1 即O(n2),忽略常量 /** * @author: krauser * @date: Create in 下午10:07 2017/12/27 * @Description: 选择排序 * * 运行时间N*(n-1)...*2*1 * 大O写法 O(n2) 省略了常数 */ public原创 2017-12-27 23:02:21 · 222 阅读 · 0 评论 -
快速排序
快速排序,先找到对比数据,然后遍历其它元素,大于对比数据的放到more集合,小于对比数据的放到less集合,再对more集合和less集合排序 最大运行时间O(n2) 平均运行时间O(nlogn) 数据量很大的情况下,快速排序是灾难性的,数据量小的情况下,效率很高 /** * @author: krauser * @date: Create in 上午11:48 2017/12/2原创 2017-12-28 12:28:46 · 189 阅读 · 0 评论 -
散列表
散列表就是数组+链表的模式,可以用于快速查找,缓存,避免重复 冲突,如果发生冲突,运行时间会是O(n),但是避免了冲突,运行时间则会是O(1),所以我们应该尽量避免冲突。 如何避免冲突: 较低的填装因子,正常0.7为最佳 良好的散列函数原创 2017-12-28 16:54:01 · 215 阅读 · 0 评论 -
广度优先搜索
运行时间O(V + E) V是节点数,E是边数 广度优先搜索解决路径是否存在以及路径最短问题。 类似于路径最短问题,可以使用图来建模型,再使用广度优先搜索。图包含了有向图和无向图。有向图中的边为箭头,箭头的方向指定了关系的方向。无向图不带箭头,关系是双向的。 队列是先进先出/栈是后进后出。 因为要找到最短路径,所以要按照顺序处理搜索的元素,所以搜索列表必原创 2017-12-28 18:48:45 · 223 阅读 · 0 评论 -
Python实现排序算法(冒泡、插入、选择、希尔、归并、快速)
#!/usr/bin/python # -*- coding:UTF-8 -*- import random def genList(length): ''' 生成指定长度的列表 ''' # print random.randint(0, 1000) list = [] for i in range(length): list.a...原创 2019-02-16 19:53:50 · 350 阅读 · 1 评论