随笔分类 -  算法

常用排序算法比较
摘要:平均时间复杂度 最差时间复杂度 空间复杂度 是否稳定 总结 冒泡排序 O(n^2) O(n^2) O(1) 是 最慢的排序算法 选择排序 O(n^2) ... 阅读全文
posted @ 2013-09-16 15:27 @且听风吟@ 阅读(396) 评论(0) 推荐(0)
KMP 算法学习
摘要:KMP算法是用来做字符串匹配的。关于字符串匹配,最简单最容易想到的方法是暴利查找,使用双重for循环处理。 该方法的时间复杂度为O((n-m+1)*m) (n为目标串T长度,m为模式串P长度, 从T中寻找是否有P串存在)。 暴利的问题是在匹配中没有利用之前比较的信息。而这些信息可能是非常有用的。所以是可以进行优化以降低时间复杂度。 而KMP算法就是一个利用模式串来构造计算不匹配时计算模式串和... 阅读全文
posted @ 2013-08-25 13:58 @且听风吟@ 阅读(306) 评论(0) 推荐(0)
GarsiaWachs算法
摘要:解决石子问题: 题目描述如下: 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。(题目可以参见:http://www.wikioi.com/problem/1048/) 算法思想: 设一个序列是A[0..n-1],每次寻找最小的一个满足A[k-1]A[... 阅读全文
posted @ 2013-08-18 21:20 @且听风吟@ 阅读(964) 评论(0) 推荐(0)
[转载]A星寻路算法介绍
摘要:转载自:http://www.raywenderlich.com/zh-hans/21503/a%E6%98%9F%E5%AF%BB%E8%B7%AF%E7%AE%97%E6%B3%95%E4%BB%8B%E7%BB%8D 学习该算法,并添加自己的理解,注释 A*算法是Dijkstra算法和贪婪算法的综合,Dijkstra算法的缺点在于从起点全方位360地向外做广度优先搜索,导致遍历节点太多... 阅读全文
posted @ 2013-08-15 09:31 @且听风吟@ 阅读(428) 评论(0) 推荐(0)
XOR linked list--- 异或链表
摘要:异或链表的结构 这是一个数据结构。利用计算机的的位异或操作(⊕),来降低双向链表的存储需求。... A B C D E ... –> next –> next –> next –> A⊕C B⊕D C⊕E 多余的一个指针中存放的地址的异或。 比如B中就存放了A⊕C的值。这... 阅读全文
posted @ 2013-08-14 15:42 @且听风吟@ 阅读(1446) 评论(0) 推荐(0)
一致性 hash 算法( consistent hashing )
摘要:为什么需要一致性hash 传统hash算法常用方式为:hash(object)%N N为一个固定值。 N设置较小时容易产生冲突碰撞问题。而N设置较大时则带来开销问题。 对于我们常用的单机程序时是内存开销变大。而用在分布式环境时,该N值和机器数目相关,则是需要的机器数增加。因此,N值应该是一个随着 业务不断变大,而逐步提升的值。而该传统的hash算法带来的问题是N值改变,比如最初N为... 阅读全文
posted @ 2013-07-11 09:55 @且听风吟@ 阅读(407) 评论(0) 推荐(0)
B 树 B+树
摘要:拜读了 http://blog.csdn.net/v_july_v/article/details/6530142, 自己总结下: B树的出发点是为了解决磁盘IO慢的问题,尽量再一个磁盘块中提供更多的索引信息。 B+树是在B树的基础上进一步提升。所有的内部节点只有关键字,没有其他信息。降低内部节点的存储开销。是的一个磁盘块可以存储更多的内部节点。 而在叶子节点保存关键字对应的有效内... 阅读全文
posted @ 2013-07-05 09:23 @且听风吟@ 阅读(255) 评论(0) 推荐(0)