算法
数据结构与算法
weisonx
developer & engineer
展开
-
topK算法实现
显然的思路是选择排序算法将数据排序后输出后(前)K个即可。但是这时间复杂度最快也只能是期望nO(lg n).2.排除剩下K个数据再通过普通排序输出K个数据。简述:选择数据中前k大(或小)的数。1.利用快排思路,每次排除一半的数据。原创 2023-02-28 22:07:59 · 149 阅读 · 0 评论 -
在Linux内核空间中计算MD5值
使用Crypto API。原创 2022-11-21 15:19:56 · 751 阅读 · 0 评论 -
LSM-tree原理分析
本文围绕以下几点并基于网上的资料(见文末)进行分析: 1. SSTable、index组成、作用,SSTable持久、不可变是什么意思? 2. key、value组成、作用 3. 树的组织、每层的内容组成、组成单位 4. key在每层有序还是全局有序、连续有序还是非无序? 5. 每层的内容发生改变的情况,没有交集的SSTable如何、什么存放到(到下一层)磁盘? 6. 合并策略,合并对象只是相邻的两层发生合并?...原创 2022-02-15 14:45:08 · 1170 阅读 · 0 评论 -
堆——最小优先队列以及实现
数据结构堆的介绍:堆与堆排序用于作业调度的最大/小优先队列可以使用堆来实现:• 最大优先队列支持以下操作○ INSERT(S, x):把元素x插入集合S○ MAXIMUM(S):返回S中具有最大关键字的元素○ EXTRACT-MAX(S):去掉并返回S中的具有最大键字的元素○ INCERASE-KEY(S, x, k):将元素x的关键字值增加到k,这里假设k的值不小于x的原关键字值• 最小优先队列支持以下操作:○ INSERT○ MINIMUM○ EXTRACT_MIN○..原创 2021-12-16 15:54:32 · 681 阅读 · 0 评论 -
排序算法——分类
按照实现排序的方法进行主分类:实际上,常用的六种是:冒泡排序快速排序希尔排序堆排序归并排序基数排序原创 2021-12-15 13:36:48 · 347 阅读 · 0 评论 -
排序算法——快速排序
实现代码://以第一个元素为主元int partition(vector<int> &data, int l, int r){ int main = 0; int i = 0; int j = 0; if(l >= r) return l; i = l; main = data[l]; for(j = l+1; j <= r; j++) { if(data[j]原创 2021-12-15 10:24:51 · 1237 阅读 · 0 评论 -
堆与堆排序
如下图所示,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。(图略)○ 树上的每一个结点对应数组中的一个元素。○ 除了最底层外,该树是完全充满的,而且是从左向右填充。○ 上图以二叉树和数组形式展现的一个最大堆。每个结点圆圈内部的数字是它所存储的数据。结点上方的数字是它在数组中相应的下标。数组上方和下方的连线显示的是父-子关系:父结点总是在它的孩子结点的左边。该树的高度为3,下标为4(值为8)的结点的高度为1○ 表示堆的数组A包括两个属性:A.length(通常)给出数组元素的个数,A.h..原创 2021-12-14 16:48:37 · 304 阅读 · 0 评论