博客专栏  >  编程语言   >  经典算法揭秘

经典算法揭秘

深入算法的背后逻辑,揭秘潜在意义。

关注
9 已关注
24篇博文
  • 二分查找的改进--差值查找

    差值查找 在二分查找中,我们每次比较都可以排除一半的数据量,这个已经是很高效了。如果利用关键字本身的信息,每次排除的数据量充分依赖于关键字的大小,则查找会更高效,这就是差值查找的思想。 下面通...

    2014-09-21 00:31
    2521
  • 数据结构:外排序-多路归并

    外排序 外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。 外...

    2014-08-23 17:56
    1900
  • 数据结构:最小生成树--Kruskal算法

    Kruskal算法 求解最小生成树的另一种常见算法是Kruskal算法,它比Prim算法更直观。从直观上看,Kruskal算法的做法是:每次都从剩余边中选取权值最小的,当然,这条边不能使已有...

    2014-08-07 11:45
    2672
  • 数据结构:最小生成树--Prim算法

    最小生成树 给定一无向带权图,顶点数是n,要使图连通只需n-1条边,若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost spanning ...

    2014-08-05 00:30
    5179
  • 数据结构:点对之间最短距离--Floyd算法

    Floyd算法 Dijkstra算法是用于解决单源最短路径问题的,Floyd算法则是解决点对之间最短路径问题的。Floyd算法的设计策略是动态规划,而Dijkstra采取的是贪心策略。当然,...

    2014-08-04 13:06
    2030
  • 数据结构:单源最短路径--Dijkstra算法

    单源最短路径 给定一带权图,图中每条边的权值是非负的,代表着两顶点之间的距离。指定图中的一顶点为源点,找出源点到其它顶点的最短路径和其长度的问题,即是单源最短路径问题。 Dijkstra算法...

    2014-08-03 21:28
    1854
  • 数据结构:图--拓扑排序

    拓扑排序 在实际应用中,有向图的边可以看做是顶点之间制约关系的描述。把顶点看作是一个个任务,则对于有向边表明任务Vj的完成需等到任务Vi完成之后,也就是说任务Vi先于任务Vj完成。对于一个有...

    2014-08-03 01:10
    2741
  • 数据结构:图的遍历--深度优先、广度优先

    图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点。当然,每个顶点有且只能被访问一次。 在图的遍历中,深度优先和广度优先是最常使用的两种遍历方式。这两种遍历方式对无向图和有向图都是适...

    2014-08-02 11:20
    9309
  • 串的匹配:朴素匹配&KMP算法

    引言 字符串的模式匹配是一种常用的操作。模式匹配(pattern matching),简单讲就是在文本(text,或者说母串str)中寻找一给定的模式(pattern)。通常文本都很大,而模式则比较短...

    2014-07-23 22:30
    1768
  • 索引排序

    索引排序 在排序时,若是数据很复杂,对数据的移动显然是费时的。若把数据移动改为指针移动,则减少了操作复杂度。索引排序,也叫地址排序,就是这种排序思想。 索引含义 根据索引的含义不同,索引排序的算法...

    2014-07-17 00:30
    2595
  • 二分检索

    二分检索 二分检索(Binary Search)也叫二分查找,是应用于有序表上的一种检索方法。二分检索的思想是:由于序列已经有序,故不需要顺序遍历,每次只需和序列中间位置的元素进行比较即可,以此确定...

    2014-07-13 15:20
    1264
  • 桶排序

    桶排序 桶排序(Bucket Sort)是对基数排序的一个变种。在排序过程中没有用到计数数组,而是用不同的桶来暂时存储关键字。看一个示意图: 整个过程就是在不断地分配、收集。 在实际应用中,根据桶的...

    2014-07-11 01:07
    1824
  • 基数排序

    前言 当序列中元素范围比较大时,就不适合使用计数排序。针对这种情况,就有了基数排序,这是一种按位排序。它仍然是以计数排序为基础。 基数排序 基数排序的基数:十进制数的基数自然是10,二进制的基数自...

    2014-07-10 21:39
    1583
  • 计数排序

    前言 一般的排序都是需要进行关键字的比较的。有没有不需要比较的的呢?有的,计数排序就是其中一种。 计数排序 假设输入序列都是0到k之间的整数,则可使用计数排序。具体操作是这样的:创建一个同类型同等...

    2014-07-09 22:09
    1120
  • 归并排序:二路归并

    归并排序(Merge Sort)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。 归并排序的具体做法: 把原序列不断地递归等...

    2014-06-26 17:40
    2491
  • 交换排序:快速排序

    快速排序(Quick Sort)也是一种交换排序,它在排序中采取了分治策略。 快速排序的主要思想是: 从待排序列中选取一元素作为轴值(也叫主元)。 将序列中的剩余元素以该轴值为基准,分为左右两部分。左...

    2014-06-14 13:47
    1977
  • 交换排序:冒泡排序

    交换排序:两两比较待排序记录的关键码,若是逆置,则交换,直到无逆置。其中最简单的交换排序是:冒泡排序。 冒泡排序(Bubble Sort,也叫起泡排序):不断地比较相邻的记录,若是不满足排序要求,则交...

    2014-06-12 18:24
    1215
  • 选择排序:堆排序

    堆排序(Heap Sort):使用堆这种数据结构来实现排序。先看下堆的定义:最小堆(Min-Heap)是关键码序列{k0,k1,…,kn-1},它具有如下特性:ki<=k2i+1,ki=k2i+1,k...

    2014-06-11 20:56
    1310
  • 选择排序:简单选择、树形选择

    选择排序(Selection Sort):经过一趟排序,可以从n-i+1(i=1,2...)个记录中选取关键字最小的记录作为有序序列中第i个记录。也就是说,每一趟排序,都会排好一个元素的最终位置。 其...

    2014-06-10 17:21
    1928
  • 插入排序:希尔排序

    我们知道当一个序列基本有序时,直接插入会变得很高效。因为此时只需少量的移动元素,操作集中在元素的比较上。基于这种想法,我们就试图把一个序列在进行直接插入前调整得尽量有序。这就是希尔排序(Shell S...

    2014-06-07 21:15
    1165

C++拾遗
2335552
C指针
925640
数据结构与算法
49139278

img博客搬家
img撰写博客
img专家申请
img意见反馈
img返回顶部