算法篇
文章平均质量分 56
算法篇
半桶水的码农
这个作者很懒,什么都没留下…
展开
-
一致性哈希
目录 使用Hash时遇到的问题 一致性Hash算法原理 一致性Hash算法的容错性和可扩展性 数据倾斜问题 具体实现 使用Hash时遇到的问题 在上述hash取模的过程中,我们虽然不需要对所有Redis服务器进行遍历而提升了性能。但是,使用Hash算法缓存时会出现一些问题,Redis服务器变动时,所有缓存的位置都会发生改变。 比如,现在我们的Redis缓存服务器增加到了8台,我们计算的公式从hash(product.png) % 6 = 5变成了hash(product.png) % 8原创 2021-05-13 17:16:58 · 96 阅读 · 0 评论 -
二分查找
目录 1. 作用和要求 2. 算法原理 3. 示例 3.1 查找成功的情况 3.2 查找不到的情况 4. 算法实现 5. 二分查找的性能分析 5.1 时间复杂度 5.2 空间复杂度 1. 作用和要求 当我们要从一个序列中查找一个元素的时候,二分查找是一种非常快速的查找算法,二分查找又叫折半查找。它对要查找的序列有两个要求,一是该序列必须是有序的(即该序列中的所有元素都是按照大小关系排好序的,升序和降序都可以,本文假设是升序排 列的),二是该序列必须是顺序存储的。图1展示的就是.翻译 2021-05-13 11:59:25 · 1295 阅读 · 0 评论 -
递归
什么叫递归 递归函数就是直接或间接调用自身的函数,也就是自身调用自己。 一般什么时候使用递归? 递归是常用的编程技术,其基本思想就是“自己调用自己”,一个使用递归技术的方法即是直接或间接的调用自身的方法。递归方法实际上体现了“以此类推”、“用同样的步骤重复”这样的思想。 还有些数据结构如二叉树,结构本身固有递归特性;此外,有一类问题,其本身没有明显的递归结构,但用递归程序求解比其他方法更容易编写程序。 需满足的两个条件 有反复执行的过程(调用自身) 有跳出反复执行过程的条件(递归出口翻译 2021-05-12 18:55:11 · 157 阅读 · 0 评论 -
快速排序
算法思想 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 实现原理 1、设置两个变量 low、high,排序开始时:low=0,high=size-1。 2、整个数组找基准正确位置,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面 默认数组的第一个数为基准数据,赋值给key,即key=array[low]。 因为默认数组的第一个数为基准,所以从后面开始翻译 2021-05-12 18:44:46 · 88 阅读 · 0 评论 -
选择排序
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。 工作原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 算法描述 n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述.翻译 2021-05-12 18:00:43 · 130 阅读 · 0 评论 -
冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,依次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 .翻译 2021-05-12 17:32:22 · 63 阅读 · 0 评论