0717-7821348
关于我们

欢乐彩主播

您现在的位置: 首页 > 关于我们 > 欢乐彩主播
欢乐彩直播室-腾讯算法工程共享!史上最全面的算法和数据结构常识
2019-07-01 22:37:54

链表

  • 链表是一种由节点(Node)组成的线性数据调集,每个节点经过指针指向下一个节点。它是一种由节点组成,并能用于表明序列的数据结构。
  • 单链表:每个节点仅指向下一个节点,最终一个节点指向空(null)。
  • 双链表:每个节点有两个指针p,n。p指向前一个节点,n指向下一个节点;最终一个节点指向空。
  • 循环链表:每个节点指向下一个节点,最终一个节点指向第一个节点。
  • 时刻复杂度:
  • 索引:O(n)
  • 查找:O(n)
  • 刺进:O(1)
  • 删去:O(1)

  • 栈是一个元素调集,支撑两个根本操作:push用于将元素压入栈,pop用于删去栈顶元素。
  • 后进先出的数据结构(Last In First Out, LIFO)
  • 时刻复杂度
  • 索引:O(n)
  • 查找:O(n)
  • 刺进:O(1)
  • 删去:O(1)

行列

  • 行列是一个元素调集,支撑两种根本操作:enqueue 用于增加一个元素到行列,dequeue 用于删去行列中的一个元素。
  • 先进先出的数据结构(First In First Out, FIFO)。
  • 时刻复杂度
  • 索引:O(n)
  • 查找:O(n)
  • 刺进:O欢乐彩直播室-腾讯算法工程共享!史上最全面的算法和数据结构常识(1)
  • 删去:O(1)

  • 树是无向、联通的无环图。

二叉树

  • 二叉树是一个树形数据结构,每个节点最多能够有两个子节点,称为左子节点和右子节点。
  • 满二叉树(Full Tree):二叉树中的每个节点有 0 或许 2 个子节点。
  • 完美二叉树(Perfect Binary):二叉树中的每个节点有两个子节点,而且一切的叶子节点的深度是相同的。
  • 彻底二叉树:二叉树中除最终一层外其他各层的节点数均到达最大值,最终一层的节点都接连会集在最左面。

二叉查找树

  • 二叉查找树(BST)是一种二叉树。其任何节点的值都大于等于左子树中的值,小于等于右子树中的值。
  • 时刻复杂度
  • 索引:O(log(n))
  • 查找:O(log(n))
  • 刺进:O(log(n))
  • 删去:O(log(n))

字典树

  • 字典树,又称为基数树或前缀树,是一种用于存储键值为字符串的动态调集或相关数组的查找树。树中的节点并不直接存储相关键值,而是该节点在树中的方位决议了其相关键值。一个节点的一切子节点都有相同的前缀,根节点则是空字符串。

树状数组

  • 树状数组,又称为二进制索引树(Binary Indexed Tree,BIT),其概念上是树,但以数组完成。数组中的下标代表树中的节点,每个节点的父节点或子节点的下标能够经过位运算取得。数组中的每个元素都包含了预核算的区间值之和,在整个树更新的过程中,这些核算的值也相同会被更新。
  • 时刻复杂度
  • 区间求和:O(log(n))
  • 更新:O(log(n))

线段树

  • 线段树是用于存储区间和线段的树形数据结构。它答应查找一个节点在若干条线段中呈现的次数。
  • 时刻复杂度
  • 区间查找:O(log(n))
  • 更新:O(log(n))

  • 堆是一种依据树的满意某些特性的数据结构:整个堆中的一切父子节点的键值都满意相同的排序条件。堆分为最大堆和最小堆。在最大堆中,父节点的键值永久大于等于一切子节点的键值,根节点的键值是最大的。最小堆中,父节点的键值永久小于等于一切子节点的键值,根节点的键值是最小的。
  • 时刻复杂度
  • 索引:O(log(n))
  • 查找:O(log(n))
  • 刺进:O(log(n))
  • 删去:O(log(n))
  • 删去最大值/最小值:O(1)

哈希

  • 哈希用于将恣意长度的数据映射到固定长度的数据。哈希函数的返回值被称为哈希值、哈希码或许哈希。假如不同的主键得到相同的哈希值,则发生了抵触。
  • Hash Map:hash map 是一个存储键值间联系的数据结构。HashMap 经过哈希函数将键转化为桶或许槽中的下标,然后便于指定值的查找。
  • 抵触处理
  • 链地址法(Separate Chaining):在链地址法中,每个桶(bucket)是彼此独立的,每一个索引对应一个元素列表。处理HashMap 的时刻便是查找桶的时刻(常量)与遍历列表元素的时刻之和。
  • 敞开地址法(Open Addressing):在敞开地址办法中,当刺进新值时,会判别该值对应的哈希桶是否存在,假如存在则依据某种算法顺次挑选下一个或许的方位,直到找到一个未被占用的地址。敞开地址即某个元素的方位并不永久由其哈希值决议。

  • 图是G =(V,E)的有序对,其包含极点或节点的调集 V 以及边或弧的调集E,其间E包含了两个来自V的元素(即边与两个极点相相关 ,而且该相关为这两个极点的无序对)。
  • 无向图:图的邻接矩阵是对称的,因而假如存在节点 u 到节点 v 的边,那节点 v 到节点 u 的边也必定存在。
  • 有向图:图的邻接矩阵不是对称的。因而假如存在节点 u 到节点 v 的边并不意味着必定存在节点 v 到节点 u 的边。

算法

排序

快速排序

  • 安稳:否
  • 时刻复杂度
  • 最优:O(nlog(n))
  • 最差:O(n^2)
  • 均匀:O(nlog(n))

兼并排序

  • 兼并排序是一种分治算法。这个算法不断地将一个数组分为两部分,分别对左子数组和右子数组排序,然后将两个数组兼并为新的有序数组。
  • 安稳:是
  • 时刻复杂度:
  • 最优:O(nlog(n))
  • 最差:O(nlog(n))
  • 均匀欢乐彩直播室-腾讯算法工程共享!史上最全面的算法和数据结构常识:O(nlog(n))

桶排序

  • 桶排序是一种将元素分到必定数量的桶中的排序算法。每个桶内部选用其他算法排序,或递归调用桶排序。
  • 时刻复杂度
  • 最优:(n + k)
  • 最差: O(n^2)
  • 均匀:(n + k)

基数排序

  • 基数排序类似于桶排序,将元素分发到必定数意图桶中。不同的是,基数排序在切割元素之后没有让每个桶独自进行排序,而是直接做了兼并操作。
  • 时刻复杂度
  • 最优:(nk)
  • 最差: O(nk)
  • 均匀:(nk)

图算法

深度优先查找

  • 深度优先查找是一种先遍历子节点而不回溯的图遍历算法。
  • 时刻复杂度:O(|V| + |E|)

广度优先查找

  • 广度优先查找是一种先遍历街坊节点而不是子节点的图遍历算法。
  • 时刻复杂度:O(|V| + |E|)

拓扑排序

  • 拓扑排序是有向图节点的线性排序。关于任何一条节点 u 到节点 v 的边,u 的下标先于 v。
  • 时刻复杂度:O(|V| + |欢乐彩直播室-腾讯算法工程共享!史上最全面的算法和数据结构常识E|)

Dijkstra算法

  • Dijkstra 算法是一种在有向图中查找单源最短途径的算法。
  • 时刻复杂度:O(|V|^2)

Bellman-Ford算法

  • Bellman-Ford 是一种在带权图中查找单一源点到其他节点最短途径的算法。
  • 尽管时刻复杂度大于 Dijkstra 算法,但它能够处理包含了负值边的图。
  • 时刻复杂度:
  • 最优:O(|E|)
  • 最差:O(|V||E|)

Floyd-Warshall 算法

  • Floyd-Warshall 算法是一种在无环带权图中寻觅恣意节点间最短途径的算法。
  • 该算法履行一次即可找到一切节点间的最短途径(途径权重和)。
  • 时刻复杂度:
  • 最优:O(|V|^3)
  • 最差:O(|V|^3)
  • 均匀:O(|V|^3)

最小生成树算法

  • 最小生成树算法是一种在无向带权图中查找最小生成树的贪心算法。换言之,最小生成树算法能在一个图中找到衔接一切节点的边的最小子集。
  • 时刻复杂度:O(|V|^2)

Kruskal 算法

  • Kruskal 算法也是一个核算最小生成树的贪心算法,但在 Kruskal 算法中,图不必定是连通的。
  • 时刻复杂度:O(|E|log|V|)

贪心算法

  • 贪心算法总是做出在当时看来最优的挑选,并期望最终全体也是最优的。
  • 运用贪心算法能够处理的问题有必要具有如下两种特性:
  • 最优子结构
  • 问题的最优解包含其子问题的最优解。
  • 贪心挑选
  • 每一步的贪心挑选能够得到问题的全体最优解。
  • 实例-硬币挑选问题
  • 给定期望的硬币总和为 V 分,以及 n 种硬币,即欢乐彩直播室-腾讯算法工程共享!史上最全面的算法和数据结构常识类型是 i 的硬币共有 coinValue[i] 分,i的规模是 [0…n – 1]。假定每种类型的硬币都有无限个,求解为使和为 V 分最少需求多少硬币?
  • 硬币:便士(1美分),镍(5美分),一角(10美分),四分之一(25美分)。
  • 假定总和 V 为41,。咱们能够运用贪心算法查找小于或许等于 V 的面值最大的硬币,然后从 V 中减掉该硬币的值,如此重复进行。
  • V = 41 | 运用了0个硬币
  • V = 16 | 运用了1个硬币(41 – 25 = 16)
  • V = 6 | 运用了2个硬币(16 – 10 = 6)
  • V = 1 | 运用了3个硬币(6 – 5 = 1)
  • V = 0 | 运用了4个硬币(1 – 1 = 0)

位运算

  • 位运算即在比特等级进行操作的技能。运用位运算技能能够带来更快的运转速度与更小的内存运用。
  • 测验第 k 位:s & (1 << k);
  • 设置第k位:s |= (1 << k);
  • 封闭第k位:s &= ~(1 << k);
  • 切换第k位:s ^= (1 << k);
  • 乘以2n:s << n;
  • 除以2n:s >> n;
  • 交集:s & t;
  • 并集:s | t;
  • 减法:s & ~t;
  • 提取最小非0位:s & (-s);
  • 提取最小0位:~s & (s + 1);
  • 交流值:x ^= y; y ^= x; x ^= y;

运转时剖析

大 O 表明

  • 大 O 表明用于表明某个算法的上界,用于描绘最坏的状况。

小 O 表明

  • 小 O 表明用于描绘某个算法的渐进上界,二者逐步趋近。

大 表明

  • 大 表明用于描绘某个算法的渐进下界。

小 表明

  • 小 表明用于描绘某个算法的渐进下界,二者逐步趋近。

Theta 表明

  • The欢乐彩直播室-腾讯算法工程共享!史上最全面的算法和数据结构常识ta 表明用于描绘某个算法确实界,包含最小上界和最大下界。

代码完成。

最终小编为我们预备了一些学习教程,期望能够协助到我们。

获取tail方法:请我们重视并私信小编关键词:“材料”即可获取。