1.6k 1 分钟

# 快速排序思想 快速排序的核心思想也是 分治思想。 快速排序主要要以待排数组中的某个数字为基准。将整个数组中的数据分为小于基准的一组和大于等于基于的一组.(或者是小于等于基准的一组和大于基于的一组), 分别对每组进行拆分,直到每组中只有一个数据。 递推公式如下: 假设 low 为待排数组中的起始索引. high 为待排数组中的终止索引. std 为基准的索引. quickSort(low,high)=quickSort(low,std−1)+quickSort(std+1,high)quickSort(low,high) =...
11k 10 分钟

上一篇介绍了 哈希算法和一致性哈希算法的原理,我们知道哈希算法在分布式场景应用中存在着定位问题。所有有一致性哈希算法。 今天我们就动手实现以下哈希算法。 可选性 回顾一下 哈希算法和一致性哈希算法 # 说明 以下多次出现服务端节点,客户端节点这两个名字,含义如下: 服务端节点: 在实际场景中,比如分布式缓存,上一篇文章中的例子,服务端节点就是多个 Redis 机器。 客户端节点: 就是要缓存的数据,这里使用这两个名词来代表不同的两个部分。 #...
937 1 分钟

数据结构与算法 这一个模块 有两个最难的知识点,一个就是 递归,另一个就是 动态规划 我们今天来学习下递归这种实现方式。 个人认为,递归不是一种算法,就是一种语法。所以我就称它为一类问题的解决方法. # 何为递归? 递归,去的过程叫递,回来的过程叫归。凡是递归类的问题,都能总结出一个递归公式. 比如: f(n+1)=f(n)+1f(n+1) = f(n) + 1f(n+1)=f(n)+1, 我们用代码实现就是: 123int f(n){ return n==1?1:f(n-1)+1;} #...
2.8k 3 分钟

将数组从中间分成前后两部分,然后对前后两部分分别进行排序,再将排好序的两部分合并在一起,这样整个数组就是有序的了。 归并体现的思想就是 分治思想 分而治之,将一个大问题分解成小的问题来解决。小问题解决了,大问题也就解决了. 这种分治的算法,一般都是递归的方式来求解。我们也尝试着写一个递归方式的归并排序。 写递归的程序,最重要的就是写 递推表达式和查找临界条件 根据归并排序的思想我们可写出这样的递推公式: 假设: low 为待排序数组的最小的索引. high 为待排序数组的最大索引. mid 为 (high+low)/2 那么: merge_sort(low,high) =...
745 1 分钟

# 排序算法开篇 排序算法有很多,比如常见的 冒泡排序,插入排序,选择排序,归并排序,快速排序,计数排序,基数排序,桶排序,还有不常见的猴子排序,睡眠排序,面条排序等。 其中,冒泡排序,插入排序,选择排序 的时间复杂度都是O(n2)O(n^2)O(n2) 快排,归并排序 的时间复杂度是 O(nlogn)O(nlogn)O(nlogn) 桶排序,计数排序,基数排序的时间复杂度是 O(n)O(n)O(n) # 排序算法好坏的评估 最好情况,最坏情况,平均情况的时间复杂度 我们要知道排序算法在不同数据下的性能表现。 时间复杂度的系数,常数,低阶 时间复杂度反应的是数据规模 n...
692 1 分钟

# 基本思想 以第一个元素为基准,与后面的元素进行对比。选择最值 (最大值 / 最小值) 与当前位置进行交换。对每个元素都为基准比较,这就是排序过程了. # 实现过程 # 代码实现 123456789101112131415161718int *select_sort(int *a, int length) { for (int i = 0; i < length; i++) { int min_value_index = i; for (int j = i + 1; j < length; j++) { //...
3.9k 4 分钟

# 哈希算法 哈希算法,又称为:散列函数,散列算法。 哈希算法是指将任意长度的二进制值串映射为固定长度的二进制串的这一规则。 举个例子: Jdk 的 HashMap 中。 1234static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);} 看似实现非常简单,但是设计一个优秀的哈希算法却不是简单的事情。优秀的 Hash 算法有什么要求? 从 Hash...
3.2k 3 分钟

👉 动态规划其实就是动态递推👈 # 要点 递归 + 记忆化 -> 递推 (自下而上的递推) 状态的定义,opt [n],dp [n],fib [n] 状态转移方程 (dp 方程), opt [n]=best_of (opt [n-1],opt [n-2]) 最优子结构 # 例子 # 斐波那契数列 我们先使用递归的方式,我们实现斐波那契数列. 123456789101112131415161718192021222324252627282930313233343536373839404142#include <stdio.h>int...
3.4k 3 分钟

# 文档 es 是面向文档的,文档是 es 中可搜索的最小单位, es 的文档由一个或多个字段组成,类似于关系型数据库中的一行记录,但 es 的文档是以 JSON 进行序列化并保存的,每个 JSON 对象由一个或多个字段组成,字段类型可以是布尔,数值,字符串、二进制、日期等数据类型。 es 每个文档都有唯一的 id , 这个 id 可以由我们自己指定,也可以由 es 自动生成。 es 每一个文档,除了保存我们写入进行的文档原始数据外,也有文档自己的元数据,这些元数据,用于标识文档的相关信息。 123456789101112{...
6.6k 6 分钟

# Elastic Search 配置 ES 提供了很多默认的参数设置,使我们不用添加任何参数就可以成功的启动 ES 。 作为一个认真的学习者。我们还是来一起看看 如何更好的自定义 ES 配置。 详细的配置内容,可以参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html. ES 的属性,分为 静态属性 和 动态属性。 所有的静态属性,都必须重启后才能生效。 对于动态属性可以通过调用 1234POST _nodes/reload_secure_settings{...