美文网首页
基本算法

基本算法

作者: 夜间寻路人 | 来源:发表于2017-11-03 17:41 被阅读13次

预热姿势: 什么是二叉查找树 (二叉排序树)

有一个根节点,每一个节点的左边的子节点都比根节点小。右边的自然是都比根节点大。

1.红黑树

规则:

1.节点只能是红色或者黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点。(nil 没有值)
4.每个红色节点的下面两个子节点都是黑色。(不能有两个连续的红色节点)
5.从任一个节点,到其每个叶子的路径包含相同数目的黑色节点。

插入删除节点时的方法:

1. 变色:尝试红色变成黑色,黑色变成红色。已满足规则即可。
2. 左旋转:逆时针旋转红黑树的两个节点,父节点被右孩子取代。从而变成左孩子。
3. 右旋转:顺时针旋转红黑树的两个节点,父节点被左孩子取代。从而变成右孩子。

2. B-树 (也叫B树 Balance Tree,不叫B减数)

减少查找次数,把树变成矮胖的样子。(根节点中的元素值,是所有子节点的分界值)
B树的插入和删除比较复杂,一个元素删除(插入到节点),需要满足下面的所有特征。
特征:

1.每个节点包含最多M个孩子。M成为B树的阶。 (假设现在是一个M阶的B树)
2.根节点至少有两个字节点。
3.每一个中间的节点都包含K-1个元素 和 K个孩子。(m/2 <= K <= m) 
4.每一个叶子节点都包含K-1个元素。(m/2 <= K <= m) 
5.每个叶子节点,都在同一层。
6.每个节点中的元素,从小到大排列。节点中K-1个元素正好是K个孩子包含的元素的值域分划。

3. B+树

B-树的变体,查询性能更高。

1.单一节点存储更多元素,查询IO次数更少。
2.每次查询都得查找到叶子节点,性能稳定。
3.所有叶子节点形成有序链表,便于范围性的查询。

特征:

1.中间节点有K个子树,就包含K个元素。且每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有叶子节点中包含了全部元素的信息,和指向含这些元素记录的指针。
  且所有叶子节点按关键字大小,自小到大顺序链接。
  叶子节点相邻之间有指针链接。(一个有序链表)
3.所有中间节点元素都同时存在于子节点。在子节点中是最大(最小)元素

4. Bitmap (位图算法)

指内存中连续的二进制位 bit,用于对大量的整型数据 做去重和查询。

吧一个唯一的整型ID,存放到二进制的字段里面。
每一位代表一个ID,ID累加。 (即index表示ID)   达到充分利用内存空间的目的。
这样一个字段表示一个Bitmap,不同的字段,只需做并运算,就可以查出需要的ID。

缺点

因为不知道总共有多少数据,只知道一个Bitmap(标签)所包含的数据。
所以不能做非运算, 如查询不是20岁的所有用户。

可以增加一个全量的Bitmap,这样就可以做非运算了。

5. A*寻路算法

引入的概念:

OpenList:存储可到达的位置。
CloseList:存储已到达的位置。
公式:F=G+H   (G表示从起点到当前位置的距离,H表示当前位置到目标位置的距离)
     F表示综合评估,尽量选择值小的。

算法

从起始位置开始,每一步都计算出所有的可用位置 和 这些位置的F值。
取最小的值,作为下一个位置。然后依次,一步一步算到终点。即得出最优路径。

相关文章

  • 基本算法

    冒泡算法 选择排序 插入排序 顺序查找 二分查找

  • 基本算法

    预热姿势: 什么是二叉查找树 (二叉排序树) 1.红黑树 规则: 插入删除节点时的方法: 2. B-树 (也叫B树...

  • 基本算法

    1.冒泡算法 2.选择算法 *上面这两个算法耗时基本相同. 插入算法 *耗时比上面两个小 快速排序 Start...

  • 基本算法

    冒泡排序、插入排序、选择排序、快速排序、二分查找(Objective-C实现)

  • 基本算法

    排序 冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对...

  • 基本算法

    题目汇总 面试中常用到机试题[https://cloud.tencent.com/developer/articl...

  • 基本算法

    分治 分治分治,即分而治之。分治,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问...

  • 基本KMeans和二分Kmeans的python实现

    基本Kmeans算法 二分KMeans算法

  • JVM垃圾回收(GC)整理总结学习

    摘要:基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法。 基本回收算法 1...

  • 最“懒惰”的kNN分类算法

    1. K-近邻算法#### k-近邻算法(k Nearest Neighbor),是最基本的分类算法,其基本思想是...

网友评论

      本文标题:基本算法

      本文链接:https://www.haomeiwen.com/subject/udwtmxtx.html