算法
请不要再掉头发了
博客都是对上课内容的一个总结和复习,本人是一个刚入门的小萌新!博客文章会有很多不完善的地方,如果有小可爱发现有问题的话,可以评论告诉我哦!有想要一起学习、共同进步的小伙伴也可以加我 QQ:2778623896 嘻嘻嘻
展开
-
最大子数组问题(分治算法)--算法导论
代码(参考《算法导论》伪代码):#include <iostream>const int ∞ = -1000000;int max_left=0;int max_right=0;using namespace std; int FindMaxCrossSubarray(int A[], int low, int mid, int high) { int lef...原创 2018-12-26 15:18:02 · 717 阅读 · 0 评论 -
算法导论--不用哨兵实现归并排序
题目:重写MERGE过程,使其不使用标记,而是在数组L或R将其所有元素复制回A然后将另一个数组的其余部分复制回A时停止。伪代码MERGE(A, p, q, r) n1 = q - p + 1 n2 = r - q let L[1..n₁] and R[1..n₂] be new arrays for i = 1 to n₁ L[i] = A[p + i - 1]...原创 2018-12-26 13:12:35 · 600 阅读 · 0 评论 -
选择排序
题目:Consider sorting n numbers in an array A by first finding the smallest element of A and exchanging it with the element in A[1]. Then find the second smallest element of A, and exchange it with A[2...原创 2018-12-26 12:53:55 · 347 阅读 · 0 评论 -
算法导论第二章2.1-3答案
查找问题:输入:n个数的一个序列A= ⟨ a1,a2,… ,an⟩和一个值v;输出:下标i使得ν= A [ i ]或者当v不在A中出现时,v为特殊值NIL;编写线性查找的伪代码,扫描序列,寻找V。使用循环不变式,证明您的算法是正确的。确保循环不变量满足三个必要属性。伪代码如图所示SEARCH(A, v): for i = 1 to A.length if A[i] == ...原创 2018-12-26 12:13:51 · 950 阅读 · 0 评论 -
汇编语言的程序格式
题目:在屏幕上显示一段信息简化段定义的源程序格式.model small ;定义程序的存储模型,.stack ;定义堆栈段.data ;定义数据段string db 'Hello world !',0dh ,0ah,'$' ;0dh是回车,0ah是换行.code.startupmov dx,offset string ;指...原创 2018-12-22 15:48:47 · 1923 阅读 · 0 评论 -
输入随机数,实现归并排序
#include &lt;iostream&gt;#include &lt;ctime&gt;#include&lt;math.h&gt;using namespace std;void merge(int *a,int p, int q,int r);void merge_sort(int *a,int p,int r);int main(){ int n; cout &lt原创 2018-12-22 00:15:16 · 1882 阅读 · 0 评论 -
设计算法--分治算法
插入排序使用的是增量法,而归并排序使用的是分治法。分治算法算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用其自身以解决紧密相关的若干子问题。分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解。分治模式在每层递归时都有三个步骤:分解;解决;合并。归并排序算法就是如此三个步骤。归并排序...原创 2018-12-21 19:13:27 · 234 阅读 · 0 评论 -
分析算法
分析算法在分析算法的过程中,通常我们想度量的是计算时间。我们算法的分析,都假定一种通用的单处理器计算模型——随机访问机(random-access machine, RAM),没有并发操作。RAM 模型包含真实计算机中常见的指令:算术指令、数据移动指令和控制指令。每条这样的指令所需时间都为常量。过程 INSERTION-SORT 需要的时间依赖于输入,不仅指的是输入的数目,也依赖于它们...原创 2018-12-21 19:01:54 · 1095 阅读 · 0 评论 -
循环不变式
循环不变式循环不变式其主要是用来帮助我们理解和证明算法的正确性。关于循环不变式我们必须证明三个性质:初始化:它在循环的第一轮迭代开始之前,应该是正确的。保持:如果在某一次循环迭代开始之前是正确的,那么在下一次迭代开始之前,它也应该保持正确。结束:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。插入排序的证明for j = 2 to A.length ...原创 2018-12-21 18:28:37 · 3612 阅读 · 0 评论 -
伪代码
伪代码与真码的区别在于:伪代码用最清晰、最简洁的表示方法来说明给定的算法;伪代码通常不关心软件工程的问题。伪代码中的一些规定缩进表示块结构;while、for与repeat-until等循环结构以及if-else等条件结构与C、C++、Java、Python和Pascal中的那些结构具有类似的解释;符号“//”表示该行后面部分是个注释;形如i=j=e的多重赋值将表达式e的值赋给...原创 2018-12-21 18:18:57 · 5209 阅读 · 1 评论 -
用随机数实现插入排序算法,并计算程序运行时间
插入排序插入排序算法是一种就地算法(空间用量是一个常数)我们希望排序的数也称为关键词(key),也就是说对一系列 key 进行排序。输入是以一个数组表示的。相对于归并排序来说,该算法对小规模数据的效率比较高。插入排序算法思想:每趟将一个元素,按照其关键字的大小插入到它前面已经排序的子序列中,依此重复,直到插入全部元素。插入排序包括:直接插入排序、二分插入排序以及希尔排序。插入排...原创 2018-12-21 16:15:53 · 3332 阅读 · 0 评论 -
算法
算法是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出。算法就是把输入转换成输出的计算步骤的一个序列。“算法”有别于"程序"的一点:算法都以正确的输出停机。数据结构是一种存储和组织数据的方式。没有任何一种单一的数据结构对所有用途均有效。...原创 2018-12-21 14:55:33 · 116 阅读 · 0 评论 -
二分查找
BINARY-SEARCH(A, v): low = 1 high = A.length while low <= high mid = (low + high) / 2 if A[mid] == v return mid if A[mid] < v low = mid + 1 els...原创 2018-12-26 13:26:38 · 252 阅读 · 0 评论