
Computer Algorithm
文章平均质量分 75
tjssehaige
完善基本功
展开
-
A星搜索 (A* Search)
致敬:P. E.Hart, N. J. Nilsson, and B. Raphael.Aformal basis for the heuristic determination of minimum cost paths in graphs.IEEE Trans. Syst. Sci. and Cybernetics, SSC-4(2):100-107, 1968。 A*搜寻算法,俗转载 2013-01-18 07:40:17 · 16389 阅读 · 1 评论 -
Linear hashing 线性哈希表
Section 1:问题描述最近在阅读分布式数据库的相关资料, 资料中提到分布式数据库中需要解决大数据如何高效存储的问题。分布式或并行数据存储数据结构的设计:(1) 需要具有良好的扩展性(scalability),能够支持大规模数据存储(2) 不允许在不同数据节点上产生数据分布不均衡的问题,即避免产生“hotspot nodes”.(3) 在存储数据增加或者缩减的情况下能够动态原创 2013-03-07 20:23:07 · 12917 阅读 · 0 评论 -
数据库索引之B-树与B+树
数据库中使用B-树和B+树对索引进行存储。在这里记录一下这两者的一些特点。B-树1. 节点包含三个部分(key, value, subtree)分别表示键值对和指向子树的指针2. 中间节点与叶子节点并无差异(搜索结果可以在非叶子节点和叶子节点命中)3. 结构图如下:4. 实例图解:B+树:1. 中间节点包含两部分(key, subtree)分别表原创 2013-02-14 22:51:50 · 1125 阅读 · 0 评论 -
堆排序 (Heap Sort)
1、堆的性质:堆是一种数组,但是以树的结构形式来看待它,如下标 i 节点的求解Parent和Children节点如下:PARENT(i) return ⌊i/2⌋ LEFT(i) return 2iRIGHT(i) return 2i + 1最大堆:根以外的每个结点i都不大于其根结点,即根为最大元素,在顶端,有A[PARENT(i)] (根)≥ A[i]最小堆:根以外转载 2013-01-18 23:32:02 · 865 阅读 · 0 评论 -
归并排序 (Merge Sort)
归并排序是分治(Divide and conquer)思想的典型应用,该算法利用递归方法将无序数组分割成左右两个子数组,并对子数组进行排序,然后将排好序的子数组合并,从而得到整个有序的数组归并排序的时间复杂度: O(nlogn)可以参见以下例子:从上图可以看出,我们首先把一个未排序的序列从中间分割成2部分,再把2部分分成4部分,依次分割下去,直到分割转载 2013-01-19 05:38:05 · 720 阅读 · 0 评论 -
冒泡排序 (Bubble Sort)
排序过程 设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。 平均时间复杂度: O(n2) Java Code:public class BubbleSort { public st转载 2013-01-18 08:02:19 · 448 阅读 · 0 评论 -
快速排序 (Quick Sort)
基本思想:快速排序时基于分治模式处理的,对一个典型子数组A[p...r]排序的分治过程为三个步骤:1.分解:A[p..r]被划分为俩个(可能空)的子数组A[p ..q-1]和A[q+1 ..r],使得A[p ..q-1] 2.解决:通过递归调用快速排序,对子数组A[p ..q-1]和A[q+1 ..r]排序。3.合并。 伪代码:QUICKSORT(A, p,转载 2013-01-18 08:09:15 · 795 阅读 · 0 评论 -
选择排序 (Selection Sort)
选择排序的基本思想是:对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,......,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。 平均时间复杂度:O(n2) Java Code:public c转载 2013-01-18 08:06:15 · 553 阅读 · 0 评论 -
插入排序 (Insertion Sort)
插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤ L[i]騆[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位转载 2013-01-18 08:03:42 · 473 阅读 · 0 评论 -
二分搜索 (Binary Search)
二分查找法主要是解决在“一堆数中找出指定的数”这类问题。而想要应用二分查找法,这“一堆数”必须有一下特征:存储在数组中 有序排列所以如果是用链表存储的,就无法在其上应用二分查找法了(链表不是顺序存储而是链式存储)。至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假设数组是递增排列,数组中的元素互不相同。平均时间复杂度: O(log转载 2013-01-18 07:45:13 · 699 阅读 · 0 评论 -
迪杰斯特拉搜索 (Dijkstra Search)
致敬:EW Dijkstra, A note ontwo problems in connexion with graphs, Numerische mathematik, 1, 269-271,1959 Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由转载 2013-01-18 08:00:22 · 865 阅读 · 0 评论