算法
csu_zhengzy~
做一只认真的小平头~
展开
-
一、试探回溯法(N皇后问题)
一、试探回溯法概念在介绍试探回溯法的概念之前,先简要介绍一个简短的古希腊神话故事,邪恶的半人半牛藏身于一个复杂的迷宫,很难找到它并杀死它,就是能成功杀死它怎么回来也是个难事。不过,在公主阿里阿德涅的帮助下,英雄忒修斯还是想到办法并消灭了怪物,并轻轻松松地走出了迷宫,他是怎么做到的呢?其实,忒修斯使用的法宝很简单,就是一团普通的绳,他将绳子的一段系在迷宫的入口上,然后用手拿着另一端进入迷宫...原创 2018-11-26 16:17:23 · 9197 阅读 · 2 评论 -
四、【排序】堆排序(heapsort)
借助堆数据结构的相关算法实现高效的排序,称为堆排序(heapsort)。因为由堆构成的优先级队列可以支持在整个堆中取出优先级最高的元素,而且其操作算法非常高效,利用这个getMax()操作,可以很方便地实现排序操作。本文介绍基于完全二叉堆的堆排序算法。(完全二叉堆的介绍其实现可参考之前的博客https://blog.csdn.net/qq_18108083/article/details/8520...原创 2018-12-22 15:54:33 · 270 阅读 · 0 评论 -
四、【排序】桶排序(bucketsort)
一、原理该算法借助一组桶单元实现对一组关键码的分拣,故称作桶排序(bucketsort)。其主要依赖于散列技术,首先借助散列函数将关键码映射到物理地址线性排列的桶单元中,这一个过程实际上完成了排序,然后遍历散列表中的非空桶将关键码读出即可。(散列表知识点:https://blog.csdn.net/qq_18108083/article/details/85134509)二、应用场合桶...原创 2018-12-21 10:35:49 · 810 阅读 · 0 评论 -
三、【图算法】PFS应用-最短路径(Dijkstra算法)
优先级搜索是个通用的框架,其可以把广度优先搜索和深度优先搜索都包含在内,只需改变优先级的更新策略即可把PFS应用到一个具体的问题中,这里介绍PFS的一个典型的应用--图的最小支撑树生成问题。若以带权图来表示真实的通讯,交通,物流或者社交网络,则各边的权重可能代表信道成本,交通费用或交往程度,对于这样的对象,往往需要解决的问题是节点A到节点B的最短通路有多长,以及由哪些边构成。策略:基本思想...原创 2018-12-07 16:23:02 · 1092 阅读 · 0 评论 -
三、【图算法】PFS应用-最小支撑树(Prim算法)
上篇博客介绍到优先级搜索是个通用的框架,其可以把广度优先搜索和深度优先搜索都包含在内,只需改变优先级的更新策略即可把PFS应用到一个具体的问题中,这里介绍PFS的一个典型的应用--图的最小支撑树生成问题。最小支撑树:对于一个带权网络G,若G的某一无环连通子图能覆盖G中所有的顶点,且其各边的权重总和最低,则称此树为图G的最小支撑树。事实上,在实际生活中的网络架构设计,VLSI布线设计等诸多问...原创 2018-12-07 15:48:30 · 2157 阅读 · 0 评论 -
三、【图算法】优先级搜索(PFS)
最基本而典型的图搜索算法包括:广度优先搜索(BFS),深度优先搜索(DFS),优先级搜索等(PFS),本文主要介绍图的优先级搜索(priority-first search,DFS),本文使用的图数据结构参见之前博客https://blog.csdn.net/qq_18108083/article/details/84870399策略:从之前介绍的广度优先搜索和深度优先搜索中,可以发现这两种算...原创 2018-12-07 15:20:35 · 2862 阅读 · 1 评论 -
三、【图算法】DFS应用-拓扑排序
深度优先搜索(DFS)算法是最重要的图遍历算法,基于DFS框架,可以导出大量的图算法,图的拓扑排序即为其中一个很典型的例子。拓扑排序:给定一个有向图,如何在保证“每个顶点都不会通过边,指向其在此序列中的前驱顶点”这一前提下,将所有顶点排成一个线性序列。例如:在编写教材时,由于各个知识点之间具有一定的依赖关系,如何将这些知识点串联为一份教学计划,保证在整个授课进程中,每节课的基本知识点均...原创 2018-12-07 14:21:06 · 2760 阅读 · 0 评论 -
三、【图算法】深度优先搜索(DFS)
图算法是个庞大的家族,其中大部分成员的主体框架都可以归结于图的遍历。图的遍历需要访问所有顶点一次且仅 一次,此外,图遍历同时还要访问所有的边一次且仅一次。经过一次遍历,树边的顶点共同构成了原图的一颗遍历树。为防止对顶点的重复访问,在遍历的过程中,需要动态地设置各顶点的不同状态,并且随着遍历的进程不断地转换状态,直至最后的“访问完毕”,图的遍历更加强调对处于特定状态顶顶啊的甄别和查找,故也称作图...原创 2018-12-07 13:35:47 · 301 阅读 · 0 评论 -
三、【图算法】广度优先搜索(BFS)
图算法是个庞大的家族,其中大部分成员的主体框架都可以归结于图的遍历。图的遍历需要访问所有顶点一次且仅 一次,此外,图遍历同时还要访问所有的边一次且仅一次。经过一次遍历,树边的顶点共同构成了原图的一颗遍历树。为防止对顶点的重复访问,在遍历的过程中,需要动态地设置各顶点的不同状态,并且随着遍历的进程不断地转换状态,直至最后的“访问完毕”,图的遍历更加强调对处于特定状态顶顶啊的甄别和查找,故也称作图...原创 2018-12-07 12:55:01 · 353 阅读 · 1 评论 -
二、(4)二叉树的层次遍历
二叉树本来是分层结构,但若施加某种约束(如遍历),则可以转变成线性结构。二叉树的遍历方法主要有:前序遍历(DLR),中序遍历(LDR),后序遍历(LRD),层次遍历。本文主要介绍二叉树层次遍历方法。层次遍历:从根节点开始,向下逐层从左往右遍历。例如:上图所示的二叉树的层次遍历顺序为:0 1 2 3 4 5 6 7本文使用的二叉树数据结构参见之前博客:https://blog...原创 2018-12-03 09:56:33 · 204 阅读 · 2 评论 -
二、(3)二叉树的后序遍历(递归实现、迭代实现)
二叉树本来是分层结构,但若施加某种约束(如遍历),则可以转变成线性结构。二叉树的遍历方法主要有:前序遍历(DLR),中序遍历(LDR),后序遍历(LRD),层次遍历。本文主要介绍二叉树后序遍历方法,其中包括了递归和迭代两种实现方式。后序遍历:左子树->右子树->根节点(根节点在最后面)例如: 上...原创 2018-12-03 09:36:58 · 775 阅读 · 0 评论 -
二、(2)二叉树的中序遍历(递归实现、迭代实现)
二叉树本来是分层结构,但若施加某种约束(如遍历),则可以转变成线性结构。二叉树的遍历方法主要有:前序遍历(DLR),中序遍历(LDR),后序遍历(LRD),层次遍历。本文主要介绍二叉树中序遍历方法,其中包括了递归和迭代两种实现方式。中序遍历:左子树->根节点->右子树(根节点在中间)例如:上图所示的二叉树的中序遍历顺序为:6 3 1 4 0 2 7 5本文使用的...原创 2018-12-03 09:24:06 · 1326 阅读 · 0 评论 -
二、(1)二叉树的先序遍历(递归实现、迭代实现)
二叉树本来是分层结构,但若施加某种约束(如遍历),则可以转变成线性结构。二叉树的遍历方法主要有:前序遍历(DLR),中序遍历(LDR),后序遍历(LRD),层次遍历。本文主要介绍二叉树前序遍历方法,其中包括了递归和迭代两种实现方式。前序遍历:根节点->左子树->右子树(根节点在前面)例如: 上图...原创 2018-12-02 22:33:12 · 764 阅读 · 0 评论 -
五、【串匹配】KMP算法详解
串或者字符串属于线性结构,可以使用向量和列表等很方便地实现,其也具有很鲜明的特征:结构简单、规模庞大、元素重复率高。在涉及字符串的众多应用中,字符串匹配是最常使用也是最为重要的操作。字符串匹配算法大约有30多种,本文介绍最为著名的KMP算法,KMP算法的性能与常规的蛮力算法相比有巨大的性能提升,但由于其巧妙的算法思路和实现技巧,我在理解KMP算法上花费了好大的功夫,言归正传,下面进行详细介绍。...原创 2018-12-25 16:38:24 · 623 阅读 · 0 评论