疯狂的石头

  • 首页

  • 归档

  • 分类

科学上网工具 Trojan 的安装与配置

发表于 2020-05-25 | 分类于 随笔

Github:trojan

安装

按照官方 Wiki 安装 trojan

创建CA证书

先安装所需的工具:

1
apt install gnutls-bin gnutls-doc

创建 CA 模板文件 ca.tmpl,内容为(cn 与 organization 可以随便写,但是为了避免可能发生的问题,服务器证书的 cn 填 VPS 的 IP 或域名):

阅读全文 »

霍夫曼编码

发表于 2018-12-09 | 更新于 2018-12-11 | 分类于 算法

描述

一种最古老而最优雅的数据压缩方法之一就是霍夫曼编码,它是一种基于最小冗余编码的压缩算法。最小冗余编码是指,如果知道一组数据中符号出现的频率,就可以用一种特殊的方式来表示符号从而减少数据需要的存储空间。其方法是,使用较少的位对出现频率高的符号编码,用较多的位对出现频率低的符号编码。我们要意识到,一个符号不一定必须是文本字符,它可以是任何大小的数据,但往往它只占一个字节。

熵和最小冗余

每个数据集都有一定的信息量,这就是所谓的熵。一组数据的熵是数据中每个符号熵的总和。符号z的熵S定义为:

Sz=-lgPz

其中,Pz是数据集中z出现的概率。如果我们确切地知道z出现了多少次,那么Pz就是z出现的频率。来看一个例子,如果z在有32个符号的数据集中出现了8次,也就是1/4的概率,那么z的熵为:

-lg(1/4)=2位

阅读全文 »

排序和搜索

发表于 2018-11-22 | 更新于 2018-11-29 | 分类于 算法

排序和搜索

排序算法分为两大类:比较排序和线性时间排序。比较排序依赖于比较和交换来将元素移动到正确的位置上。令人惊讶的是,并不是所有的排序算法都依赖于比较。对于那些确实依赖于比较来进行排序的算法来说,它们的运行时间往往不可能小于O(nlg n)。对于线性时间排序,从它的名字就可以看出,它的运行时间往往与它处理的数据元素个数成正比,即为O(n)。遗憾的是,线性时间排序依赖于数据集合中的某些特征,所以我们并不是在所有的场合都能够使用它。某些排序算法只使用数据本身的存储空间来处理和输出数据(这些称为就地排序),而有一些则需要额外的空间来处理和输出数据(虽然可能最终结果还是会拷贝到原始的内存空间中)。

搜索就是在一个数据集中找到一个元素的位置,它可用于任何任务中。一种最简单的、不需要费任何脑筋的搜索方法是:简单地从数据集的一端查找到另一端。这就是所谓的线性搜索。通常,线性搜索用在那些对随机访问支持得不太好的数据结构中,例如:链表。另一种方法是使用二分查找,这会在本章中介绍。还有一些搜索方法专门用于特定的数据结构,例如哈希表和二叉树。

插入排序(Insertion sort)

描述

插入排序虽然不是最有效的排序方法,但它简单,并且不需要额外的存储空间。其最佳应用场景是对一个小的数据集合进行递增排序。

插入排序每次从无序数据集中取出一个元素,扫描已排好序的数据集,并将它插入有序集合合适的位置上。虽然乍一看,插入排序需要独立为有序和无序的元素集合预留足够的存储空间,但实际上它是不需要额外的存储空间的。

插入排序是一种较为简单的算法,但是它在处理大型数据集时并不高效。因为很明显,在决定将元素插入哪个位置之前,需要将被插入元素和有序数据集中的其他元素进行比较,这会随着数据集的增大而增加额外的开销。然而插入排序的优点是,当将元素插入一个有序数据集中时,只需要对有序数据集最多进行一次遍历,而不需要完整地运行算法。这个特性使得插入排序在增量排序中非常高效。

分析

阅读全文 »

堆和优先队列

发表于 2018-11-18 | 更新于 2018-11-21 | 分类于 算法

堆和优先队列介绍

堆和优先队列是一种处理对数据集进行频繁的插入和删除操作时,往往需要快速确定最大或最小的元素这一问题的有效方法。

堆

它是一种树形组织,使我们能够迅速确定包含最大值的结点。维持一棵树的代价低于维持一个有序数据集的代价。同样,我们可以通过堆快速地找到包含最小值的元素。

优先队列

它是一个从堆自然衍生而来的数据结构。在优先队列中,数据保存在一个堆中,这样我们能够迅速确定下一个最高优先级的结点。所谓元素的“优先级”在不同的问题中意义也不相同。

阅读全文 »

二叉搜索树

发表于 2018-11-16 | 更新于 2018-11-18 | 分类于 算法

二叉搜索树介绍

二叉搜索树是由二叉树组成的专用于查找和搜索目的的一种数据结构。

要在二叉搜索树中查询一个结点,从根结点开始一层一层往下查找,直到找到目标结点为止。当遇到一个比目标结点值大的结点时,顺着该结点的左子树继续查找。如果遇到的结点值小于目标结点,则顺着该结点的右子树继续查找。

二叉搜索树是一种用于查找操作的高效数据结构,因为在最坏的情况下,只需要查找一个分支上的数据就可以了,而不用检索每一个数据。因此,查找操作的复杂度是O(lg n),这里n代表树中的结点个数。这里树必须是保持平衡的。

Note:
正式的说法是,如果满足树的所有叶子结点都在同一层上,或者所有叶子结点都在最后两层上,且倒数第二层是满的,则这棵树是平衡的。

阅读全文 »
12…9
Crazy Stone

Crazy Stone

step by step...

42 日志
9 分类
E-Mail GitHub
© 2018 — 2020 Crazy Stone
由 Hexo 强力驱动
|
主题 — NexT.Pisces