桶排序(Bucket Sort):将元素分到多个桶中,对每个桶进行排序,最后将所有桶中的元素按顺序合并起来。时间复杂度为O(n)。...假设要排序的数据有 n 个,数据在桶中均匀分布,桶的数量为 k,则桶排序的时间复杂度为:最好情况:所有数据落在同一个桶中,此时桶排序的时间复杂度为 O(n)。...最坏情况:每个桶中只有一个数据,此时桶排序的时间复杂度为 O(nlogn),因为需要对每个桶进行一次排序。平均情况:假设数据在桶中均匀分布,数据经过桶的划分后,每个桶中的数据量为 n/k。...例如,对于年龄在0~100岁之间,且人数较多的人群进行排序时,可以采用桶排序,将数据分别放入对应的桶中,再对每个桶中的数据进行排序,最后将所有桶的数据合并起来即可得到排序结果。...insertion.Length; k++) { bucket[j, k + 1] = insertion[k]; } } //将所有桶里的数据回写到原数组中
(left + 1) : (right + 1); } 1.5 如何在排序的数组中,找出给定数字出现的次数 其实我的想法是通过hashmap来实现,其实也没必要在乎数组是否是排序的。...数组中的数据在内存中时顺序存储的,链表是随机存储的。 数组便于查询;链表便于插入删除。...堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定 计数排序 O(n+k) O(n+k) O(n+k) O(k) 稳定 桶排序 O(n+k) O(n+k) O(n^2) O...(n+k) 稳定 基数排序 O(n*k) O(n*k) O(n*k) O(n+k) 稳定 . 2.面试题 2.1 百度一面 如何实现水平垂直居中 Position 属性的几种区别 讲一下盒子模型...HTTP 状态码并说出它们的出现场景 二面(技术面) 主要聊项目,技术聊的比较少,说一下印象深的问题 1.如何实现一个简单的单点登录 2.说一下关系数据库和非关系数据库的区别,并说下使用场景 3.说一下关系数据库外键的使用
)O(n+k))O(n+k)) 稳定排序 桶排序 O(n+k)O(n+k)O(n+k) 稳定排序 O(n2)O(n^2)O(n2)的排序算法 ☘️冒泡排序 两个数比较大小,如要求是升序排序,则较大的数往下沉...)O(n^2)O(n2) 2、空间复杂度:O(1)O(1)O(1) 3、稳定排序 4、原地排序 ☘️选择排序 每次选择最小或者最大的元素排列到有序区。...)O(n^2)O(n2) 2、空间复杂度:O(1)O(1)O(1) 3、非稳定排序 4、原地排序 ☘️插入排序 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这...4、原地排序 O(n+k)O(n+k)O(n+k)的排序算法、非比较排序 ☘️计数排序 把数组元素作为数组的下标,然后用一个临时数组统计该元素出现的次数,例如 temp[i] = n, 表示元素 i...k)O(n+k)O(n+k) ,K:建立的计数数组长度 2、空间复杂度:O(n+k)O(n+k)O(n+k) 3、稳定排序 4、非原地排序 ☘️基数排序 先以个位数的大小来对数据进行排序,接着以十位数的大小来多数进行排序
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中...空间复杂度:运行完一个程序所需内存的大小。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。...:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。...使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。 1. 什么时候最快 当输入的数据可以均匀的分配到每一个桶中。...最佳情况:T(n) = O(n+k) 最差情况:T(n) = O(n+k) 平均情况:T(n) = O(n2) 基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字
现在需要扫描所有生成的句子以找到其中看起来「最人类」的翻译。 要做到这一点,我们需要将生成的句子和来自英语书籍和新闻故事的数百万个真实句子进行比较。我们所能获取的英语文本越多,效果就会越好。...很可能之前从没有人用英语写过这样的句子,所以它与我们数据集中的任何句子都不会非常相似。我们给予这个可能的翻译一个较低的概率得分。...为什么我们想要这么做?难道说不论我们最后计算的是什么,2+2不应该总是等于 4 吗? 这种技巧能让神经网络学习数据序列中的模式。例如,你能用它来基于一句话中前面几个词来预测后面最有可能的那个词。 ?...即使你有一个带有高端视频卡的超快计算机,可能也要花费一个月的处理时间训练自己的语言翻译系统。 同样,序列到序列机器翻译技术进展迅速,让人难以跟上。...谷歌的另一个团队使用卷积神经网络取代第一个 RNN 就做到了这一点。这使得输入可以是一张图片而非句子。剩下的工作基本一样: ? 就像这样,我们能将图片转化为文字内容(只要我们有大量的训练数据)!
快速排序 2.1 算法步骤 从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。...这个算法很明显是稳定的,也就是说具有相同值得元素在输出数组中的相对次序和他们在输入数组中的相对次序相同。算法中的循环时间代价都是线性的,还有一个常数k,因此时间复杂度是Θ(n+k)。...使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 设置固定数量的空桶。 把数据放到对应的桶中。 对每个不为空的桶中数据进行排序。...时间复杂度 因为时间复杂度度考虑的是最坏的情况,所以桶排序的时间复杂度可以这样去看(只看主要耗时部分,而且常熟部分K一般都省去) N次循环,每一个数据装入桶 然后M次循环,每一个桶中的数据进行排序(每一个桶中有...基数排序对要排序的数据要求如下: 需要分割出独立的"位"来比较,而且位之间可以进行比较。 每一位的数据范围不能太大,要可以用线性排序算法来排序,否则,基数排序的时间复杂度就无法做到 O(n)。
再如,快速排序原本是不稳定的排序方法,但若待排序记录中只有一组具有相同关键码的记录,而选择的轴值恰好是这组相同关键码中的一个,此时的快速排序就是稳定的。...再考虑递归分解,基本思路是将数组分解成left和right,如果这两个数组内部数据是有序的,那么就可以用上面合并数组的方法将这两个数组合并排序。如何让这两个数组内部是有序的?...然后再调用堆调整这个过程,可见这是一个递归的过程。 (2)建立最大堆(Build_Max_Heap): 将堆所有数据重新排序。...依次将所有关键字全部堆入桶中,并在每个非空的桶中进行快速排序。 因此,我们需要尽量做到下面两点: (1) 映射函数f(k)能够将N个数据平均的分配到M个桶中,这样每个桶就有[N/M]个数据量。...当然,做到这一点很不容易,数据量巨大的情况下,f(k)函数会使得桶集合的数量巨大,空间浪费严重。这就是一个时间代价和空间代价的权衡问题了。
1、计数排序(Counting Sort) 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。...作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。...1.1 算法描述 找出待排序的数组中最大和最小的元素; 统计数组中每个值为i的元素出现的次数,存入数组C的第i项; 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加); 反向填充目标数组:将每个元素...i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。...当输入的元素是 n 个 0到 k 之间的整数时,时间复杂度是O(n+k),空间复杂度也是O(n+k),其排序速度快于任何比较排序算法。当k不是很大并且序列比较集中时,计数排序是一个很有效的排序算法。
返回装满所有杯子所需的 最少 秒数。 题解 怎么样,第一题是不是就来了个下马威? 看着题目很简单,但是真上手去做,还是要想一想。由于只有三个杯子,我们可以先对这三个杯子的容积进行排序。...并且最大的数据范围只有1000,我这里直接用了一个长度为1000的数组来标记一个数字有没有被删除掉,用一个标记l来记录当前存在的最小元素。...这里,我使用了两个pair的vector来分别记录了start和target中的每一个字符以及它的位置。接着再来分别判断,每一个字符是否相同,并且能否通过移动到达同样的位置。...求这个问题很简单,我们可以把这 n+k 个球排成一排,一共有 n+k-1 个间隔。我们从中任选 n-1 个间隔,可以将球分成 n 堆。并且每一堆球的数量至少是一个,且总和刚好等于 n+k 。...在分解质因数的时候我用到了筛法,这不是必须的,因为本题数据范围不大。
“单下标”表示:一种线性下标表示法,系统默认矩阵的所有元素按照从上到下,行从左到右排成一列,只需要使用一个下标索引就可以定位矩阵中的任何一个元素。...(b) 单元素访问 必须指定两个参数,即其所在行数和列数,才能访问一个矩阵中的单个元素。 例2.2 ?...A( e1:e2:e3):表示取数组或者矩阵A的第e1元素开始每隔e2步长一直到 e3的所有元素; A([m,n,l] ):表示取数组或矩阵A中的第m,n,l个元素; A(: , n):表示取A矩阵的第...; A( m: m+k , n : n+k ):表示取A矩阵第m~m+k行内,并在第n~n+k列中的所有元素; A(m,k:end):表示表示取A矩阵m行,第k列到最后一列。...end表示某一维的末尾元素下标。 例2.3 ? 温馨提示 如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请持续关注我。
) O(nlogn) O(nlogn) O(1) 不稳定 计数排序 O(n+k) O(n+k) O(n+k) O(n) 稳定 桶排序 O(n+k) O(n²) O(n) O(n+k) 稳定 基数排序 O...[1, 数组中不相同的元素的个数] 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的 进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。...,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。...插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。...插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
,内存有限,无法将数据全部加载到内存中。...桶内的数据都是分数相同的考生,所以并不需要再进行排序。我们只需要依次扫描每个桶,将桶内的考生依次输出到一个数组中,就实现了50万考生的排序。因为只涉及扫描遍历操作,所以时间复杂度是O(n)。...除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序,否则,基数排序的时间复杂度就无法做到 O(n) 了。...k) 空间复杂度分析 O(n+k) 稳定性分析 稳定 适用条件 计数排序只能用在数据范围不大的场景中,如果数据范围「k」比要排序的数据「n」大很多,就不适合用计数排序了。...除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序,否则,基数排序的时间复杂度就无法做到O(n)了。
它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。...当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序) 对于额外数组该如何理解呢...例如上述第一个1就a[1]++,第二个5就a[5]++…… 然后取值时候遍历这个数字,顺序将目标编号的数字取出来即可。(每取一个对应位置数值减1直到为0为止)。...,计数排序的时间复杂度为O(n+k)其中k为正数范围;线性时间大部分都比其他排序快一点,但是也不一定,例如你遇到1 2 4 2 100001这样一个序列,其中k的范围为10000,虽然他是O(n+k)=...当数据范围波动不是很大,数据相对比较集中,这时候用计数排序肯定是最好的啦,这点和桶排序的要求很像哦,没错,它其实就是一种特殊的桶排序,他的桶大小为1,用数值计数词数而以,其他都是一样的操作。
1、批量删除一个集合内的多条记录 我们在开发的过程中,一个集合内有几百条、几千条数据希望全部清空,但是又不想删掉该集合再重建,那应该如何做呢,总不能一条一条删除吧?...云开发控制台的可视化操作目前无法做到批量删除一个集合内的多条记录的,但是这个功能我们可以通过控制台数据库高级操作的脚本来轻松进行批量删除,而且还可以创建一个脚本模板,有需要直接点击执行脚本模板做到长期复用...2、如何给集合内所有数据都新增一个字段 我现在一个集合内有N条数据,由于数据库初期设计的问题,现在想给所有记录新增一个字段,想像进行关系型数据库和Excel新增一列的类似操作,那我应该怎么做呢?...,文章置顶或调整顺序这些,可能你还没有来得及开发相关功能,我们可以使用控制台来自定义,比如给你要排序的记录新增一个字段来自定义你想要的排序顺序,然后再在数据查询时使用orderBy。...2、如何批量获取云存储的fileID以及批量导出数据库里所有数据? 我有很多图片、文件批量导入到了云存储,但是我批量获取这些文件的fileID应该怎么做?
* 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行(out-place 占用额外内存) * 举例:把排序时把数组中的数按顺序放入了一个新的数组,...我就开了一个n规模大小的数组,这个就与数据规模有关。 ... * 设置一个定量的数组当作空桶; * 遍历输入数据,并且把数据一个一个放到对应的桶里去; * 对每个不是空的桶进行排序; * 从不是空的桶里把排好序的数据拼接起来...* * 缺点:桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效 * * 分析: * 时间复杂度: * 最好:...O(n+k) * 最坏:O(n^2) * 平均时间复杂度: O(n+k) * 空间复杂度: O(n+k) * 稳定性:稳定(其稳定性是根据桶内排序使用的算法)
作为一个日志采集的Agent简单来看其实就是一个将数据从源端投递到目的端的程序,通常目的端是一个具备数据订阅功能的集中存储,这么做的目的其实是为了将日志分析和日志存储解耦,同一份日志可能会有不同的消费者感兴趣...假设我们已经存在一份点位文件叫做offset,每一秒我们去更新这个点位文件,将采集的位置实时的记录在里面,整个更新的过程如下: 将点位数据写入到磁盘的offset.bak文件中 fdatasync确保数据写入到磁盘...那么这个新文件被发现后会从点位文件中查询上次采集到哪了,结果就会找到之前的那个文件记录的点位了,导致新文件是从一个错误的位置进行采集。...通过搜索相关的资料我发现这个在用户态来做几乎是没有办法做到的,Linux内核没有暴露相关的API。只能通过Kernel的方式来解决,比如添加一个API通过fd来获取文件的引用计数。...想要编写一个可靠的日志采集Agent确保数据不丢失,这其中的复杂度和挑战不容忽视。希望通过本文能让读者对日志采集有一个较为全面的认知。
直接插入排序 直接插入排序在所有排序算法中的是最简单排序方式之一。...桶排序从字面的意思上看: 桶:若干个桶,说明此类排序将数据放入若干个桶中。 桶:每个桶有容量,桶是有一定容积的容器,所以每个桶中可能有多个元素。...在数据分布均匀且每个桶元素趋近一个时间复杂度能达到O(n),但是如果数据范围较大且相对集中就不太适合使用桶排序。 ?...基数排序也称为卡片排序,基数排序的原理就是多次利用计数排序(计数排序是一种特殊的桶排序),但是和前面的普通桶排序和计数排序有所区别的是,「基数排序并不是将一个整体分配到一个桶中」,而是将自身拆分成一个个组成的元素...) O(n) 稳定 桶排序 O(n+k) O(n+k) O(n+k) O(n+k) 稳定 计数排序 O(n+k) O(n+k) O(n+k) O(k) 稳定 基数排序 O(n*k) O(n*k) O(n
大家好,我是老三,一个刷不动算法的程序员。排序算法相关题目尽管在力扣中不是很多,但是面试中动不动要手撕一下。接下来,我们看一下十大基本排序, 排序基础 排序算法的稳定性 什么是排序算法的稳定性呢?...排序算法的稳定性是针对所有输入实例而言的。即在所有可能的输入实例中,只要有一个实例使得算法不满足稳定性要求,那么这种排序算法就是不稳定的。...将桶中的元素依次取出,取出的元素就是有序的了 桶排序代码实现 桶排序的实现我们要考虑几个问题: 桶该如何表示?...时间复杂度 桶排序最好的情况,就是元素均匀分配到了每个桶,时间复杂度O(n),最坏情况,是所有元素都分配到一个桶中,时间复杂度是O(n²)。...平均的时间复杂度和技术排序一样,都是O(n+k)。 空间复杂度 桶排序,需要存储n个额外的桶,桶中又要存储k个元素,所以空间复杂度是O(n+k)。
非比较排序概念 非比较排序是一种排序算法,它不是通过比较元素大小进行排序的,而是基于元素的特征和属性排序。这种排序方法在特定情况下,可以做到比元素比较排序(快排,归并)更有效率。...非比较要求输入数据满足一定条件,或者对数据特征进行合理利用 常见的非比较排序算法包括 计数排序 通常适用于范围比较小的整数排序,通过统计每个元素的出现次数,然后将元素按顺序放入数组 桶排序 将数据放到若干个桶中...,随后对每个桶进行排序,最后再将所有桶的数据进行合并 基数排序 通过将待排序数值按位数分组,逐位进行排序,通常配合计数排序实现 计数排序 计数排序是一种非比较的排序算法,适用于特定条件下的排序,尤其是当待排序的元素范围较小其重复元素较多的时候...他的基本原理是利用一个额外的数组来记录每一个元素出现的次数,用次数来表达从而达到排序的目的,以下是排序的原理步骤 1.确定范围:首先确定待排序数组的元素的最大值和最小值 2.创建计数数组:根据范围创建一个技术数组...5.排序输出,根据计数数组生成的已排序数组,遍历计数数组,按次数将对应的元素输出到结果数组中 计数排序的时间复杂度O(n+k),其中n是待排序元素的数量,k是计数数组的大小。
桶排序的核心在于将数据分到有限数量的桶里,然后对每个桶内的数据进行排序,最后将所有桶中的数据合并成一个有序序列。...桶排序的效率很大程度上取决于所选择的映射函数,该函数需要将输入的N个数据均匀分配到K个桶中。在理想情况下,桶排序的时间复杂度可以达到 O(n+k)。...桶排序的关键在于如何选择桶的数量和如何将数据均匀地分配到各个桶中。...桶排序算法的步骤 桶排序的基本步骤如下: 创建空桶:设置一个定量的数组作为空桶; 数据分配:遍历输入数据,并将数据分配到对应的桶中; 桶内排序:对非空桶内的数据进行排序; 数据合并:将所有非空桶中的数据按顺序合并...桶排序的效率分析 桶排序的时间复杂度取决于桶的数量和每个桶内数据的排序效率。在最佳情况下,如果数据均匀分布在每个桶中,时间复杂度可以达到 O(n+k),其中n是数据的数量,k是桶的数量。
领取专属 10元无门槛券
手把手带您无忧上云