算法&数据结构
文章平均质量分 77
N拳超人
美国富士康
展开
-
数据结构 - 字典树
字典树 TrieTrie 读 Tree 或者 Try 来自 reTrieval又称前缀树(prefix tree), 能被用来快速搜索字符串 比如查英文字典时,我们是按照单词各个字母的顺序挨个查找 - words 我们会按照顺序 w -> o -> r -> d -> s.在计算机中我们可以使用树型结构来对单词进行存储以便于在查找的时候方便。上图是在一个Trie中插入单词 {"APP", "APPLE", "B", "BI", "CA"} 得出的结构. 从上图可以看出,我们原创 2020-05-17 08:46:19 · 372 阅读 · 0 评论 -
数据结构 - 树
树树型结构是一种抽象类型,用来模拟具有树状结属性的非线性的数据结构.专业术语父节点: 父节点是相对的概念, 它被它的子节点称为父节点;他被它的父节点称为子节点.子节点: 和父节点类似.叶子节点: 无子节点的节点.线性数据结构: 数据点被连续的联系在一起比如array;queue;linkedlist etc. 相反的Tree被称为非线性,因为他是层次型结构.简单路径: 一个没有重复节点的道路.高度/深度: 对一个树来说高度和深度是一样的;对一个节点来说深度是 从该节点到根节点的边的数量(自下原创 2020-05-11 06:56:09 · 375 阅读 · 0 评论 -
Design Pattern - Observer Pattern (设计模式 - 观察者模式)
什么是Observer Pattern?在一个系统中,有一个对象接收数据,其他若干对象监听来自这个对象数据的变化的这种情况可以使用design pattern,接受数据的这个对象我们称为 发送者 publisher; 监听变化的对象我么称为 观察者 observer。稍微具体的例子有一个天气的基站会接受来自三个不同感应器的数据,每当 weather 数据被改变时,weather obj就会更新 d...原创 2018-03-11 13:04:59 · 476 阅读 · 0 评论 -
线性时间的排序 - Decision Tree Model & Counting Sort & Radix Sort & Bucket Sort
我们之前接触过的 O(nlogn) 算法如 merger sort, heap sort, quick sort 等都是通过挨个比较输入序列的大小来决定顺序的。这些算法的平均时间复杂度都是O(nlogn)的,今天要学习的都是在线性时间完成排序的算法。1. Decision Tree Model. 决策树模型是通过一系列的基于一些数量的比较直接产生结果的排序方法。- 注意:其原创 2016-12-05 00:21:02 · 1004 阅读 · 0 评论 -
QuickSort 快速排序
快速排序 - QuickSort 最坏情况是 O(n^2) , 平均是 O(n*logn) 但是尽管 堆排序的运行时间 是保证在 O(n*logn), 但是在实际中快速排序的运行时间往往是快于堆排序的。 快速排序也是in-place的排序。原理:快速排序 的原理就是选定一个点作为轴心点 - pivot, 初始是从 数组的第一个元素开始,一直到 倒数第二原创 2016-12-02 05:00:10 · 886 阅读 · 0 评论 -
平衡树 || Red-Black Tree
红黑树 是一种 平衡二叉搜索树, 这里的平衡和我们之前说的AVL树的平衡有一点不一样,AVL的平衡是任意节点的子树 的高度差不能大于1. 但是红黑树的平衡是对于他的几点性质来说的。红黑树的性质: 1. 每个节点有两种颜色 红色或者黑色 2. 根节点是黑色的原创 2016-11-01 03:40:39 · 728 阅读 · 0 评论 -
HeapSort 堆排序
堆排序 - Heap Sort, 它和Merge Sort - 归并排序很像,但是不同于Insertion Sort - 插入排序,因为它的运行时间为 O(nlogn). 可是它又和Insertion Sort很类似,但是不同于Merge Sort, 因为它是In Place的。综上所述,heap sort是整合了insertion sort 和 merge sort的优点的算法即 In Pl原创 2016-11-10 02:24:48 · 1409 阅读 · 0 评论 -
蓄水池抽样 - Reservoir Sampling
转自: http://www.guokr.com/blog/745588/题目要求:从个元素中随机抽取个元素,但的个数无法事先确定。在实际应用中,往往会遇到很大数据流的情况。因此,我们无法先保存整个数据流然后再从中选取,而是期望有一种将数据流遍历一遍就得到所选取的元素,并且保证得到的元素是随机的算法。蓄水池抽样算法:先选取个元素中的前个元素,保存在集合中原创 2016-08-02 03:04:48 · 524 阅读 · 0 评论 -
二叉树 & 二叉查找树
二叉树 ( Binary Tree ) : 一种树型结构,每个节点最多拥有两个节点。( 如下图 )几种类型的二叉树 1. full binary tree: 每个节点的孩子数 是 0 或者 2. 对高度没有要求。 如下图 2. perfect binary tree: 这个就是最完美的树,顾名思义,所有叶子节点都有相同原创 2016-10-17 23:51:41 · 441 阅读 · 0 评论 -
找到最长回文字符串 - Manacher's Algorithm
记得刚开始学习计算机的时候,除了输出星星就是找到最长回文字符串这样的问题, 开始以为最长回文串问题很简单,但是经过多年的学习再回头看的时候发现,它并不简单,今天就给它解个密。开始我们先来看一个时间复杂度差的算法。 1. 时间复杂度为 n^3. 空间复杂度为 1. 这个算法基本上是最简单的了,最好理解的。/** * 使用iteration * 循环三次原创 2016-10-03 09:22:33 · 438 阅读 · 0 评论 -
拓扑排序 - Topological Sort
有向图的拓扑排序是它的顶点的线性排序,比如任意 边 uv 对于 它的顶点 u 和 顶点 v, u v按照 u 在前 v在后的顺序排序。 注意:只有 有向无环图 (DAG) 才有拓扑排序, 如果一个图 是有环 的图那么它不存在拓扑排序。在现实生活中, 拓扑排序能被用于以下场景。 比如任意顶点都是要完成的任务,并且每个边 都是 完成一个任务才能继续完成下一个任务的 一种限制。 所以在这原创 2016-10-02 02:17:21 · 653 阅读 · 0 评论 -
Hash Tables 哈希表
在了解哈希表之前我们先来看一下什么是Direct-Address tables? 假设我们的一个应用需要存储 键值对并且能支持操作 增删改查那么我们首先最原始的方法就是使用 Direct-address table. 我们在 T 中通过对键的查找直接找到相对应的数据。这种方法看似很好,但是有很大的局限性。 首先我们需要确定Universe of keys (U), 所以当U集合很大原创 2016-11-07 01:31:00 · 811 阅读 · 0 评论 -
平衡树 - AVL || Balanced Binary Search Tree
三个问题。 What/Why/How.什么是平衡树? 平衡树是 基于二叉搜索树的 一种自动保持它的高度最小的一种树。 通俗点说, 就是一个有着高度最小的二查搜索树. [任意节点的子树的高度差小于等于1 ]为什么要有平衡树? 请考虑一下两个树,对比来看。以下两张图都是二叉搜索树, 但是很明显能看出来当我们需要对其进行操作比如 插入删除等,左边的都会浪费更长时间。原创 2016-10-22 02:27:52 · 1223 阅读 · 0 评论 -
Round-robin 算法
Round-robin 是一种使用在 进程 和 网络分配 计算中的算法。 以 进程分配为例:假设我们的time slot ( 单次运行进程的最长时间) 是100 ms, 如果 job1 一共需要消耗250 ms来运行, 那么 round-robin 分配器就会暂停 job1 在其运行100 ms之后, 然后分配给其他的进程, 并且将 job1 剩下的内容放到队列中排队,直到 jo原创 2016-10-08 23:05:57 · 20769 阅读 · 0 评论