BlueLake博客主题的详细配置

2021年2月3日更新:

BlueLake主题主题写了有些年头了,随着Hexo升级到5.X,BlueLake很多配置已经过时,在使用中难免出现问题。

所以,我利用工作之余抽了些时间进行了大改版,主题模板引擎由Jade(Pug)换成了EJS,以landscape为原型进行二次开发;保留BlueLake主题老版本的其他功能,如原生JS实现站内搜索功能,本地分享等;新添加了一些新的功能,如打赏模块,集成新的三方评论等等。

说了这么多不如你亲自体验来的直接,BlueLake主题地址:https://github.com/chaooo/hexo-theme-BlueLake。

「数据结构与算法」B 树 与 B+ 树

一般情况,我们可以把整个数据结构存储到计算机的主存中;可如果数据更多装不下主存,那么意味着必须把数据结构放到磁盘上。
此时“大O模型”不再适用,因为大O分析假设所有操作耗时都是相同的,所以涉及到磁盘I/O就不再适用了。与内存相比,磁盘必须花成倍的时间来存取一个数据元素,这是因为磁盘的机械部件读写数据的速度远远赶不上纯电子媒体的内存。

1
【CPU】 <---> 【内存】 <--I/O--> 【磁盘】

当在大量数据存储中,查询时我们不能一下子将所有数据加载到内存中,只能逐一加载磁盘页,每个磁盘页对应树的节点。造成大量磁盘I/O操作(最坏情况下为树的高度)。
平衡二叉树由于树深度过大而造成磁盘I/O读写过于频繁,进而导致效率低下。
为了减少磁盘I/O操作的次数,就你必须降低树的深度,将“瘦高”的树变得“矮胖”。
所以,就引入了B 树B 树利用多个分支(称为子树)的节点,减少获取记录时所经历的节点数,从而达到节省存取时间的目的。

「数据结构与算法」常见算法思想

数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠的执行起来。
算法(Algorithm)是为了解决一个特定的问题而精心设计的一套数学模型以及在这套数学模型上的一系列操作步骤,这些操作步骤是将描述的输入数据逐步处理、转换,并最后得到一个确定的结果。
一般来说,算法设计没有什么固定的方法可循。但是通过大量的实践,也总结出算法某些共性的规律,包括枚举(Enumeration)、递归(Recursion)、分支法(Divide and Conquer)、贪心法(Greedy)、回溯法(Backtracking)、动态规划法(Dynamic Programming)等。

「数据结构与算法」二分查找

二分查找(Binary Search)又称折半查找、二分搜索、折半搜索等,查找思想有点类似分治思想,对应的时间复杂度为O(logn)
二分查找算法仅适用于有序且使用顺序存储结构的序列(比如有序数组)。
核心思想是:不断地缩小搜索区域,降低查找目标元素的难度。(每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。)

  • 以在升序序列中查找目标元素为例,二分查找算法的实现思路是:
    1. 初始状态下,将整个序列作为搜索区域(假设为 [B, E]);
    2. 找到搜索区域内的中间元素(假设所在位置为 M),和目标元素进行比对。如果相等,则搜索成功;如果中间元素大于目标元素,将左侧 [B, M-1] 作为新的搜素区域;反之,若中间元素小于目标元素,将右侧 [M+1, E] 作为新的搜素区域;
    3. 重复执行第二步,直至找到目标元素。如果搜索区域无法再缩小,且区域内不包含任何元素,表明整个序列中没有目标元素,查找失败。

「数据结构与算法」排序算法

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。

「数据结构与算法」图(Graph)

图(Graph)。和树比起来,这是一种更加复杂的非线性表结构,由顶点和连接每对顶点的边所构成的抽象网络就是图。

图的定义:图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是顶点的集合,E是边的集合。

图中的元素叫做顶点(vertex)。顶点与其他顶点建立的连接关系叫做边(edge)。跟顶点相连接的边的条数叫做顶点的度(degree)

如果图中任意两个顶点之间的边都是无向边(边没有方向),则称该图为无向图(Undirected graphs)
以此类推,把边有方向的图称为有向图(Directed graphs)

  • 完全图:
    • ①无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。
    • ②有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。
  • 当一个图接近完全图时,则称它为稠密图(Dense Graph),而当一个图含有较少的边时,则称它为稀疏图(Spare Graph)

「数据结构与算法」堆(Heap)

堆的两点要求:

  • 堆是一个完全二叉树;
  • 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。
    • 对于每个节点的值都大于等于子树中每个节点值的堆,我们叫做大顶堆
    • 对于每个节点的值都小于等于子树中每个节点值的堆,我们叫做小顶堆

「数据结构与算法」红黑树(Red-Black Tree)

平衡二叉查找树其实有很多,比如,红黑树(Red-Black Tree,简称 R-B Tree)、伸展树(Splay Tree)、树堆(Treap)等,但是我们提到平衡二叉查找树,听到的基本都是红黑树,它是一种不严格的平衡二叉查找树。
红黑树是一种含有红黑节点并能自平衡的二叉查找树。它必须满足下面性质:

  1. 每个节点要么是红色,要么是黑色;
  2. 根节点是黑色的;
  3. 每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;
  4. 任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;
  5. 任意一节点到每个叶子节点的路径,都包含相同数目的黑色节点;