- 博客(62)
- 收藏
- 关注
原创 (八)桶排序
桶排序1、思想概念 桶排序(bucketsort)假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)区间上。 桶排序将[0,1)区间划分为n个相同大小的子区间,或称为桶。然后,将n个输入数分别放到各个桶中。因为输入数据是均匀、独立地分布在...
2018-05-09 15:29:32
283
原创 (七)基数排序
基数排序1、思想与概念 基数排序(radix sort)是一种用在卡片排序机上的算法。基数排序是先按最低有效位进行排序来解决卡片排序问题的。然后算法将所有卡片合并成一叠,其中0号容器中的卡片都在1号容器中的卡片之前,而1号容器中的卡片又在2号容器中的卡片前面,以此类推。之后,用同样的方法按次低有效位对所有的卡片进行排序,并把拍好的卡片再次合并成一叠。重复这一过程,直到对所有的d位数字都进行了...
2018-05-07 20:49:30
509
原创 (六)计数排序
计数排序1、计数排序思想 计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间为O(n)。 计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置。当有几个元素相同时,要做修改,不能把它们放在同一个输出位置上。2、伪代码*COUNTING-SORT(A, A.len...
2018-05-07 11:22:21
414
原创 (五)快速排序
快速排序1.快速排序的描述通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,基准数据排在这两个子序列的中间;然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。采用分治思想,对一个输入的子数组A[p…r],按以下三个步骤进行排序:分解:以数组A[p]为基准元素将A[p…r ]划分成三段A[p…q-1]...
2018-05-05 09:28:20
235
原创 (四)堆排序
堆排序1、堆概念(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。表示堆的数组A包括两个属性:A.length给出数组元素的个数,也表示有多少个堆元素存储在该数组中。只有A[0…A.length]中存放的是堆的有效元素。树的根结点是A[0],给定一个结点的下标i,它的父结点、左孩子、右孩子的下标://父...
2018-05-02 17:11:46
199
原创 (三)最大子段和问题
1.概念求数组的和最大的非空连续子数组,这样的连续的子数组称为最大子数组(maximum subarray)2.常规方法(O^3)/* 最大子段和问题 O^3*/#include <iostream>using namespace std;//打印数组void printArray(int *arr, int strat, int last){ for (int i = ...
2018-04-26 16:35:40
915
1
原创 (二)C++分治算法下的归并排序
分治算法下的归并排序1、分治思想将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治模式在每层递归时都有三个步骤:(1) 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。(2) 解决这些子问题,递归地求解各子问题。然而,若子问题的规模足够小,则直接求解。(3) 合并这些子问题的解成原问题的解...
2018-04-14 23:28:11
1371
原创 (九)队列的链式存储结构设计与实现
队列的链式存储结构设计与实现1、概念 队列也是一种特殊的线性表;可以用线性表的链式存储来模拟队列的链式存储。2、实现(1)linkqueue.h#ifndef _MY_LINKQUEUE_H_#define _MY_LINKQUEUE_H_typedef void LinkQueue;LinkQueue* LinkQueue_Create();void LinkQueue_De...
2018-04-13 15:22:41
427
原创 (八)队列的顺序存储设计与实现
队列的顺序存储设计与实现1、概念 队列是一种特殊的线性表;队列仅在线性表的两端进行操作;对头(Front)是取出元素的一端;队尾(Rear)是插入数据元素的一端;队列不允许在中间部位进行操作。 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。2、队列模型与链表模型的分析3、代码实现(1)seqqueue.h#ifndef _MY_SEQQUEUE_H_#define _M...
2018-04-13 11:11:55
355
原创 (七)栈的应用
栈的应用1、就近匹配 (1)算法思路 从第一个字符开始扫描,当遇见普通字符是忽略,当遇见左符号时压入栈中,当遇见右符号时从栈中弹出栈顶符号,并进行匹配。 匹配成功:继续读入下一个字符; 匹配失败:立即停止,并报错。 结束:成功:所有字符扫描完毕,且栈为空。 失败:匹配失败或所有字符扫描完毕但栈非...
2018-04-13 10:51:16
252
原创 (六)栈的链式存储设计与实现
栈的链式存储设计与实现1、栈的链式存储是通过线性表的链式存储来模拟的。在头部添加或删除元素不会涉及到数组元素的大量移动。2、栈的链式存储思路基本与线性表的链式存储一致,可参考线性表的链式存储。线性表的链式存储3、相关代码(1)linkstack.h#ifndef _MY_LINKSTACK_H_#define _MY_LINKSTACK_H_typedef void LinkStack;...
2018-04-13 09:51:44
445
原创 (五)栈的顺序存储设计与实现
栈的顺序存储设计与实现1、stack概念 栈是一种特殊的线性表;栈仅能够在线性表的一段进行操作;栈顶(top)是允许操作的一端;栈底(bottom)是不允许操作的一端。 线性表的顺序存储来模拟栈的顺序存储时,在尾部添加或者删除元素,不会涉及到数组元素的大量移动。 2、设计与实现 栈顺序存储的实现思路基本与线性表的顺序存储思路一致,可参考前面文章理解。点击打开链接3、代码(1)seqS...
2018-04-10 23:10:56
705
原创 (四)双向链表的设计与实现
双向链表的设计与实现1.概念 在单链表的结点中增加一个指向其前驱的pre指针。双向链表拥有单链表的所有操作。2.设计与实现 (1)插入操作a. 插入第一个元素异常处理: if(next != NULL) {next->pre = node; }node->pre = current;b.在0号位置处插入元素: 新来结点node前pre指向null...
2018-04-10 22:53:40
534
原创 (一)C++插入排序
一 插入排序1.概念 插入排序对于少量元素排序,是一种有效的算法。就像打纸牌一样,把每次摸到的纸牌放入恰当的位置,排好顺序。2.算法思想 INSERTION_SORT(A)1 for i=1 to A.len2 temp=A[i]3 j=i-14 while j>=0 and A[j]>temp5 A[j + 1] = A[j]6 A[j] = t...
2018-04-10 21:13:13
150
原创 (三)循环链表的设计与实现
循环链表的设计与实现1.概念 将单链表中最后一个数据元素的next指针指向第一个元素。在循环链表中可以定义一个“当前”指针,这个指针通常称为游标,可以通过这个游标来遍历链表中的所有元素。2.设计与实现(1)插入元素分析node->next = current->next;current->next = node;先1后2(2)删除结点 1、 删除普通结点 ...
2018-03-18 13:56:35
426
原创 (二)线性表的链式存储实现
线性表的链式存储设计与实现1.概念 (1)为了存储每个数据元素和其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息之外,还需存储只是其直接后继的信息。n个结点链接成一个链表,每个结点只包含一个指针域,又叫单链表。 (2)单链表正是通过每个结点的指针域将线性表的数据元素按其逻辑次序链接在一起。 (3)表头结点:链表中的第一个结点,包含指向第一个数据元素的指针和链表自身的一些信...
2018-03-18 10:19:59
548
原创 (一)线性表的顺序存储实现
线性表的顺序存储设计与实现1.概念 用一段地址连续的存储单元依次存储线性表的数据元素2.设计与实现(1)插入元素 a 判断线性表是否合法 b 判断插入位置是否合法 c 把最后一个元素到插入位置的元素后移一个位置 d 将新元素插入 e 线性表长度加1(2)获取元素位置 a 判断线性表是否合法 b 判断插入位置是否合法 c 直接通过数组下标的方...
2018-03-17 16:05:31
1476
转载 五大常用算法——分治法,动态规划,回溯法,分支界限法,贪心算法
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题
2017-12-29 15:56:42
592
原创 vs2013配置opencv3.2.0
工具/原料l VS2013l OpenCV3.20http://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.2.0/opencv-3.2.0-vc14.exe 方法/步骤l 下载工具:本教程以OpenCV3.2.0为例。l 解压:本教程解压到G盘,解压的其它地方也是可以的,解压完后得
2017-04-20 09:27:05
9167
原创 assert()用法
assert()函数用法总结 assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的
2017-04-19 15:16:09
338
转载 磁盘调度算法
磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:先来先服务算法(FCFS),最短寻道时间优先算法(SSTF),扫描算法(SCAN),循环扫描算法(CSCAN) 例:假定某磁盘共
2016-12-01 23:39:32
1542
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅