随笔分类 - 算法和数据结构
摘要:当需要生成随机点且要求随机点自然均匀的分布时,使用泊松盘采样就较为适合。 但该方法与统计学上的概念关联不大,这个只相当于点在面积上服从泊松分布, 而实现这个结果有很多做法。 最终效果: 圆形为含半径的点,圆形的中心代表生成点 B站有一个不错的搬运教程(Bridson方法): https://www.
阅读全文
摘要:参考文章:https://www.cnblogs.com/zhiyishou/p/4430017.html 本文使用逐点插入法进行剖分,并使用Unity3D实现。 通过阅读文章《Triangulate》给出的伪代码进行具体编写,我加了些注释: subroutine triangulate input
阅读全文
摘要:OBB全称Oriented bounding box,方向包围盒算法。其表现效果与Unity的BoxCollider并无二致。由于3D空间的OBB需要多考虑一些情况 这里仅关注2D空间下的OBB。 实现效果: 网上有许多OBB的讲解,具体步骤也未必一样,我的做法: 在两个凸多边形中找到一根轴,凸多边
阅读全文
摘要:原文在《游戏编程精粹2》的1.2中,BloomFilter是一种可以快速检测是否存在集合包含关系的数据结构,但有一定的误识别率。 该结构的优点 判断包含关系时效率较高,粗略测试了下比List快一倍(不拆分哈希) 由于内部是位数组BitArray,做交集并集几乎不产生开销 该结构的缺点 有一定的误识别
阅读全文
摘要:快速排序是不稳定的排序,并且其中逻辑比较怪。 网上的教程一般只介绍第一轮排序,省略第二轮 以至于学习时把分割子序列的步骤给漏了,浪费了不少时间 这里推荐这个文章,非常详细:http://www.cnblogs.com/jingmoxukong/p/4302891.html 首先取一个关键数,并不断来
阅读全文
摘要:参考文章(图文很详细):http://www.cnblogs.com/jingmoxukong/p/4303279.html 以升序为例,Shell希尔排序把数列按组划分,并对划分后的组进行插入排序 希尔排序是不稳定的,有可能快也有可能慢 举例:13, 1, 5, 3, 2, 8, 1 七个数字,起
阅读全文
摘要:以升序为例,插入排序的思路是: 遍历数组时,每一次和前一个数做比较,如果前一个数比他大 就进入替换状态,不断的把前面比他大的数做交换,直到没有为止 比如1,4,3,2 开始遍历,3和4交换,变成 1,3,4,2 4和2交换,变成 1,3,2,4,发现前一个数比它大,继续交换 1,2,3,4 排序完成
阅读全文
摘要:更详细的请看这篇博文:http://www.cnblogs.com/jingmoxukong/p/4308823.html 归并排序(Merge Sort),基于分治法的排序,比较简单。 个人感觉其核心1是数组左右拆分之后类似队列的比较,核心2是利用for循环不断增加间隔数 类似两两合并之类的算法都
阅读全文
摘要:堆排序相对冒泡这些要复杂一些,它需要先初始化堆。.net里List的排序就混合使用了堆排序和另2种排序。 出于学习目的,代码示范里不使用数组结构,数组取索引比较深涩。而使用嵌套类来实现。 1.初始化堆 排序肯定是有升序和降序两种,堆排序也一样,分为大顶堆和小顶堆。初始化堆的目的就是变为大顶堆或者小顶
阅读全文
摘要:桶排序一般用于非数字元素排序,比如26个字母。做了一张图,应该好理解,因为数字是10进制,就准备10个桶,去装每一位的数就行了。 桶排的空间复杂度比较高,对于万,亿级别的数据不能用桶排来做。 先取所有数据的最高位,这里4个数最高是千位。 代码:(转自天与我生博客) using System; usi
阅读全文
摘要:就是把01010的数据换成了可以自定义的字典.如果字典数量比字符数量多,就会把多出来的字典去掉。 如果字典里值有重复的话,也会把重复值去掉。 其实就是把左右子树变成数组,但其他对二叉树的操作就会受影响了。 具体代码如下 class Program { static void Main(string[
阅读全文
摘要:huffman中文叫做哈弗曼,霍夫曼。网上清一色全是C++,C的实现,C#的应该比较少。所以成了写这篇文章的动机。 首先哈弗曼算法是一个压缩算法,但只是进行了替换字符的操作,没有合并字符记录位置。很多算法基于哈弗曼又进一步的进行合并等操作。并且哈弗曼编码不仅可以用于压缩,还可以拿他进行简单的加密。
阅读全文
摘要:时间复杂度就是这个算法需要花多少时间。空间复杂度就是这个算法占用内存多少。 t(n) = O(f(n)) 这是时间复杂度表示,t是Time缩写,f可能是Funciton缩写。 s(n) = O(f(n)) 空间复杂度,s是space的缩写。右边的一样。 PS:O意指大O表示法。
阅读全文
摘要:二叉树的划分 二叉树分为 一般二叉树,满二叉树,完全二叉树。 一般二叉树就是普通的二叉树。 满二叉树,是所有节点全部存满的二叉树。 完全二叉树是在满二叉树的前提下,从右边砍掉一些节点的结果。为什么要有完全二叉树,是因为二叉树需要转换成线性结构储存。 普通树转换为二叉树 上面是普通树,下面是转换后的二
阅读全文