打赏

随笔分类 -  算法

数据结构
摘要:循环结构 while语句 先判断条件在进入循环体。 for语句 先判断条件,再进入循环体,再执行增量表达式。 do while语句 先执行循环体,再判断条件。 阅读全文
posted @ 2022-02-13 13:55 不像话 阅读(75) 评论(0) 推荐(0) 编辑
摘要:1.统计二叉树中度为1的节点个数 int NodeCount(BiTree bt){ if(bt == null) return 0; if(bt->lchild == null && bt->rchild != null || bt->lchild != null && bt->rchild == 阅读全文
posted @ 2022-02-04 19:29 不像话 阅读(38) 评论(0) 推荐(0) 编辑
摘要:求矩阵乘积Q=MxN,采用行逻辑链接存储表示。 例:M=,N=。Q=MxN,Q=。 三元组 M.data N.data Q.data i j e i j e i j e 1 1 3 1 2 2 1 2 6 1 4 5 2 1 1 2 1 -1 2 2 -1 3 1 -2 2 1 -1 3 1 2 3 阅读全文
posted @ 2022-02-04 18:57 不像话 阅读(340) 评论(0) 推荐(0) 编辑
摘要:算法 时间复杂度 空间复杂度 稳定性 最好情况 一般情况 最坏情况 直接插入排序 O(n) O(n2) O(n2) O(1) 稳定 冒泡排序 O(n) O(n2) O(n2) O(1) 稳定 简单选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 希尔排序 快速排序 O(nlog2n) 阅读全文
posted @ 2022-02-03 20:21 不像话 阅读(196) 评论(0) 推荐(0) 编辑
摘要:基数排序得到递减序列的过程如下: 初始化:设置r个空队列(基数),Qr-1, Qr-2, ..., Q0 按照各个关键字位权重递增的次序,个、十、百对d个关键字位分别做”分配“和”收集“ 分配:顺序扫描各个元素,若当前处理的关键字位=x,则将元素插入Qn队尾。 收集:把Qr-1, Qr-2, ... 阅读全文
posted @ 2022-02-03 20:12 不像话 阅读(73) 评论(0) 推荐(0) 编辑
摘要:”2路“归并,把两个已经有序的序列合并成一个。 核心操作:把数组内的两个有序序列归并成一个。 空间复杂度O(n) 时间复杂度O(nlog2n) //归并排序 int *B = (int *)malloc (n * sizeof(int)); //定义足够大的数组B void Merge(int A[ 阅读全文
posted @ 2022-02-03 20:00 不像话 阅读(79) 评论(0) 推荐(0) 编辑
摘要:检查当前节点是否满足:根≥左,右。 若不满足,将当前节点与更大的一个孩子互换。 i的左孩子 2i i的右孩子 2i+1 i的父节点 i/2 时间复杂度O(nlog2n) 空间复杂度O(1) 若元素互换破坏了下一级的堆,则采用相同的方法继续往下调整。(小元素下坠) //建立大根堆 void Build 阅读全文
posted @ 2022-02-03 19:47 不像话 阅读(37) 评论(0) 推荐(0) 编辑
摘要:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。 空间复杂度O(1) 时间复杂度O(n2) 总共需要对比的关键字次数(n(n-1))/2 void SelectSort(int A[], int n){ for(int i=0; i<n-1; i++){ i 阅读全文
posted @ 2022-02-03 19:35 不像话 阅读(34) 评论(0) 推荐(0) 编辑
摘要:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 时间复杂度O(nlog2n) 空间复杂度O(log2n) 快速排序的算法优化思路:尽量选择可以把数据中分的枢纽。 //用第一个元素将待排序序列划分为 阅读全文
posted @ 2022-02-03 19:28 不像话 阅读(29) 评论(0) 推荐(0) 编辑
摘要:每趟排序都是把值最小的数移至前面,依次排序。 空间复杂度O(1) 最好情况下,初始序列为”正序“序列,只需一趟排序,n-1次比较,且不移动记录,时间复杂度为O(n)。 最坏情况下,初始序列为逆序,则需要进行n-1趟排序,需要进行(n(n-1))/2次比较,并做等数量的记录移动,时间复杂度O(n2)。 阅读全文
posted @ 2022-02-03 19:19 不像话 阅读(28) 评论(0) 推荐(0) 编辑
摘要:先将整个待记录排序分割成若干子序列分别进行直接插入排序,待整个序列中的记录”基本有序“时,再对全体记录进行一次直接插入排序。 又称”缩小增量排序“,是一种属于插入排序类的算法,但在时间效率上比较优秀。 时间复杂度:与增量序列d1、d2、...的选择有关,目前无法用数学手段确切表示。 最坏时间复杂度O 阅读全文
posted @ 2022-02-03 19:05 不像话 阅读(32) 评论(0) 推荐(0) 编辑
摘要:折半插入排序所需附加存储空间和直接插入排序相同,折半插入排序仅减少了关键字空间的比较次数,而记录的移动次数不变。 时间复杂度为O(n2) 空间复杂度为O(1) void InsertSort(int A[], int n){ int i,j,low,mid,high; for(i=2; i<=n; 阅读全文
posted @ 2022-02-03 18:53 不像话 阅读(34) 评论(0) 推荐(0) 编辑
摘要:直接插入排序是最简单的排序方法,它的基本操作是将一个记录插入到以排序好的有序表中,从而得到一个新的记录数增一的有序表。 * 空间复杂度O(1) * 时间复杂度O(n²) void InsertSort(int A[], int n){ int i,j,temp; //定义变量 for(i=1; i< 阅读全文
posted @ 2022-02-03 18:43 不像话 阅读(32) 评论(0) 推荐(0) 编辑
摘要:"倒排索引"是文档检索系统中最常用的数据结构,被广泛地应用于全文搜索引擎。它主要是用来存储某个单词(或词组)在一个文档或一组文档中的存储位置的映射,即提供了一种根据内容来查找文档的方式。由于不是根据文档来确定文档所包含的内容,而是进行相反的操作,因而称为倒排索引(Inverted Index)。 实 阅读全文
posted @ 2019-11-19 15:35 不像话 阅读(759) 评论(0) 推荐(0) 编辑
摘要:前言部分: 在Map阶段,使用job.setInputFormatClass定义的InputFormat将输入的数据集分割成小数据块splites,同时InputFormat提供一个RecordReder的实现。本实验中使用的是TextInputFormat,他提供的RecordReder会将文本的 阅读全文
posted @ 2019-11-19 14:09 不像话 阅读(424) 评论(0) 推荐(0) 编辑
摘要:数据去重”主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。 数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。在MapReduce流程中,map的输出<key,value>经 阅读全文
posted @ 2019-11-18 20:28 不像话 阅读(783) 评论(0) 推荐(0) 编辑
摘要:求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形成一个集合value-list,然后将输入到Reduce端,Reduce端汇总并且统计记录数,然后作 阅读全文
posted @ 2019-11-17 13:46 不像话 阅读(4244) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示