算法导论知识点
文章平均质量分 89
平凡的L同学
个人感兴趣的方向:云计算网络,SDN,网络操作系统,量子通信,机器学习,欢迎讨论。
展开
-
跳跃表原理
Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。Skip List可以很好解决有序链表查找特定值的困难。转载 2017-02-07 22:12:46 · 1403 阅读 · 0 评论 -
分治算法在一般选择问题中的应用
最近在啃算法导论,感觉挺有趣的,所以准备写一些博文来记录自己学习中的一些心得。下面有一个要求就是在一个数组中选取第i小的元素,怎么办?直接排序?然后再输出结果?当然这是一种解决方法,但是实在是太low,算法导论中给出了一个比较经典的解决方法:其过程与快速排序过程中划分类似。每次划分集合可以确定一个元素的最终位置,根据这个位置可以判断是否是我们要求的第i小的元素。如果不是,那么我们只关心划分原创 2017-01-22 23:40:14 · 2798 阅读 · 0 评论 -
图相关知识点(下)
广度优先搜索(BFS)广度优先搜索:首先访问节点v,然后依次访问与节点v相邻的节点,访问完相邻节点后再访问相邻节点的相邻节点。下面是广搜的一个示意图:初始的时候,每一个节点都是白色的即将搜索起点V0已经搜索了v0,下面希望搜索v1、v2、v3下面将要搜索v4、v5、v6找到最短的路径:V0->v2->v6转载 2017-02-14 22:22:58 · 563 阅读 · 0 评论 -
图相关知识点(上)
通过符号G=(V,E)表示,图中的顶点数|v|和边数|E|用来度量输入的规模。使用V[G]表示一个图G的顶点集,用E[G]来表示其边集。有两种表示方法:邻接表和邻接矩阵无向边:边是没有方向的,写为(a,b)有向边:边是有方向的,写为简单图:不存在指向自己的边,不存在两条重复边的图无向完全图:每个顶点之间都有一条边有向完全图:每个顶点之间都有两条互为相反的边度原创 2017-02-13 22:43:25 · 568 阅读 · 0 评论 -
动态规划
首先是概念:动态规划就是将原问题划分为简单的几个小问题(有点类似与分治法?但是分治法中的各个小问题是相互关联的)动态规划解决的步骤:初始状态->[决策1]->[决策2]....[决策n]->结束状态首先是划分阶段->表示状态->确定转移方程->确定边界原创 2017-02-12 23:26:33 · 470 阅读 · 0 评论 -
Dijkstra算法原理
Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,E) 中,假...转载 2017-02-19 22:46:13 · 129791 阅读 · 43 评论 -
Bellman-Ford最短路径算法
原文地址:http://blog.csdn.net/sunnyyoona/article/details/45222073 https://my.oschina.net/u/1378920/blog/421768单源最短路径给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。Dijksra的算法是一转载 2017-02-19 22:05:53 · 2158 阅读 · 0 评论 -
Prim算法和Kruskal算法
Prim算法和Kruskal算法都能从连通图找出最小生成树。区别在于Prim算法是挨个找,而Kruskal是先排序再找。 一、Prim算法: Prim算法实现的是找出一个有权重连通图中的最小生成树,即:具有最小权重且连接到所有结点的树。(强调的是树,树是没有回路的)。 Prim算法是这样来做的: 首先以一个结点作为最小生成树的转载 2017-02-19 15:48:58 · 2107 阅读 · 0 评论 -
竞争性分析自组织表
1. 自组织表:定义两种操作l n个元素的列表L,访问(可能是查找,也可以是其他操作)元素x的代价与元素在列表中的位置有关(从表头到x的距离)。l 元素在L中的位置可以通过交换相邻的元素来改变,而这个操作的代价为O(1)。如果考虑用户的访问可能是一系列的,而且一个元素被访问后,再次被访问的概率会增大,因此考虑对一个元素访问后将该元素和其前驱的元素交换(代价为O(1转载 2017-02-09 11:29:21 · 1289 阅读 · 0 评论 -
平摊分析概念以及知识点
平摊分析是一种算法分析的手法,其主要思路是:对若干条指令(通常O(n)条)整体进行考虑其时间复杂度(以获得更接近实际情况的时间复杂度),而不是逐一考虑执行每条指令所需的时间复杂度后再进行累加。对于一个操作的序列来讲,平摊分析(Amortize Analysis)得出的是在特定问题中这个序列下每个操作的平摊开销。一个操作序列中,可能存在一、两个开销比较大的操作,在一般地分析下,如果割裂了各个操作转载 2017-02-08 15:04:34 · 5302 阅读 · 0 评论 -
哈希表原理
什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(关键字)这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储转载 2017-01-30 23:01:14 · 674 阅读 · 0 评论 -
二叉树知识点总结
二叉树是一种比较重要的数据结构,这里对一些常见的二叉树的基础知识做一个总结,具体的代码实现放到下一篇博文首选对二叉树进行一个分类,二叉树分为以下的几种:(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。(2)满二叉树——除了叶结点外每一个结点都有左右子原创 2017-02-04 00:00:22 · 17611 阅读 · 0 评论 -
使用递归解决问题的一般思路
貌似有点道理,转了看看原文地址:http://blog.csdn.net/taoyr/article/details/12167635 递归,编程的时候时常会遇到,所以很多时候,我都在想能不能把递归搞成一个公式一样的东西。功夫不负有心人,在查阅了相关书籍,回想高中数学,加上我的体会,中得到了一个公式一样的东西,应该确定的说是一般的思路: 1。考虑特殊情况。记得高中学习数列的转载 2017-06-13 22:54:30 · 1311 阅读 · 1 评论