算法导论学习
JAVA/C++
始终保持对代码的那份单纯的热爱,保持对技术的专注和钻研.
展开
-
枚举详解
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。 尽管枚举偏暴力,但其往往不用太动脑筋,简单直白.而且即使采用这种暴力方法求解问题,对问题的一定分析往往会让算法简洁高效. 1.简单的枚举以除法(UVa725)和最大乘积(UVa 11059)为例.来说明枚举也不可简单.也有很多需要注意的地方需要领会学习...原创 2020-03-11 21:47:56 · 262 阅读 · 0 评论 -
动态规划初步
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶...原创 2020-03-11 18:59:15 · 219 阅读 · 0 评论 -
再谈递归
我们知道其实所有循环都可以通过递归实现.在有些函数式语言中并没有循环的概念,如Haskell和Scheme里既没有for循环,也没有while循环,只能使用递归。我们通过以下例子来说明:1.数组求和int arr[6]={1,22,33,11,5,6};int RA(int n){ if(n==0) return arr[0]; else return RA(n-1)+...原创 2020-03-10 21:10:00 · 177 阅读 · 0 评论 -
浅谈递归
"一个函数调用其自身,就是递归."递归的概念简单的有点让人摸不着头脑.我们知道一个函数本质上是为了能够让调用者通过传递一个口令(也即参数),让其实现一个固定的功能.那么递归就是自己既充当了主人,又充当了仆人的角色.他通过不断的使用同一个功能来解决问题,直到取得突破点.这个突破点往往是一些隐藏的已知条件.同时不难发现一般这样的问题可以划分为能用同一个功能完成的有限个子问题.例如求5的阶乘...原创 2020-03-03 17:07:17 · 329 阅读 · 0 评论 -
排序算法5——归并排序简析
排序任务可分为:1.把前一半排序.2.把后一半排序.(在这前两步用到递归,不在解释.)3.把两半归并成新的有序数组.拷贝回原数组,排序完成.#include<iostream>#include<map>using namespace std;int a[10]={12,1,23,14,55,6,88,34,100,37};int b[10];v...原创 2020-02-14 20:09:05 · 230 阅读 · 0 评论 -
排序算法4——简单选择排序简析
简介简单选择排序是一种选择排序。在简单选择排序过程中,所需移动记录的次数比较少选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止思想(1)从待排序序列中,找到关键字最小的元素;(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;(3)从余下的N - 1个元素中,找出关键字最小的元素,重复(1)、(2)步...原创 2019-08-18 15:49:40 · 825 阅读 · 0 评论 -
排序算法3——直接插入排序简析
简介直接插入排序是一种最简单的插入排序。插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,直到全部插入完成。百度百科思想例:原始数据4,2,5,3,2.5插入排序 4 2 4 2 4 5 2 3 4 5 ...原创 2019-08-18 11:51:44 · 422 阅读 · 0 评论 -
排序算法2——冒泡排序简析
简介冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。前一篇的快速排序也是一种交换排序.百度百科思想它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素...原创 2019-08-18 10:24:00 · 543 阅读 · 0 评论 -
排序算法1——快速排序简析
简介对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n^2)的排序算法.虽然最坏情况时间复杂度很差.但是快速排序通常是实际排序中应用中最好的选择,因为他的平均性能非常好.他的期望复杂度为O(nlgn).常见的数据排序算法有冒泡排序、堆排序、简单选择排序,归并排序,插入排序等等,各个适用范围不同,快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过...原创 2019-08-18 09:27:07 · 232 阅读 · 0 评论 -
算法复杂性分析及运算规则证明(二)
突然发现算法复杂性分析及运算规则证明(一)中在运算规则证明中有点问题,所以务必做一下重新的说明.必须先说明一下定义(我看的定义是电子工业出版社王晓东的书),他说的是在文献中有两种定义,取的是以下定义:设f(N)和g(N)是定义在正数集上的正函数,存在常数C和自然数N0,使得存在N,当N>N0时,f(N)<=Cg(N).则称f(N)当N充分大时,上有界,且为g(N)。记为f(N)...原创 2019-03-08 14:56:45 · 2642 阅读 · 1 评论 -
算法复杂性分析及运算规则证明(一)
我们有必要知道算法的复杂性是算法运行所需要的计算机资源的量,需要空间资源的量称为空间复杂度,同样需要时间资源的量称为时间复杂度。那麽这个量与什么有关系呢?这个量应该是只依赖于要解决的问题的规模,算法的输入和算法的本身。专业术语用C=F(N,I,A)三元函数表示。时间T(time),空间S(space)。二者计量方法相似,且分析空间复杂度要比时间复杂度简单,因此我们主要讨论时间复杂度。但...原创 2019-03-07 13:26:03 · 8952 阅读 · 0 评论 -
什么是算法?(一)参考浙大陈越教授
算法(Algorithm)通俗的讲,算法是指解决问题的一种方法或一个过程.更严格的讲,算法是由若干条指令组成的有穷序列.需满足以下5条性质:1.输入;2输出;3.确定性;4.有限性;5.可行性什么是好的算法?空间复杂度S(N)和时间复杂度T(N)---此处引用上一节"什么是数据结构"的两个函数第一个:PrintN函数---空间复杂度S(N)递归方法:他在内存里占用空间的数...原创 2019-02-27 17:33:17 · 2802 阅读 · 0 评论 -
什么是算法?(二)参考浙大陈越教授
应用实例一:最大子列和问题给定N个整数的序列{A1,A2,A3...An},求函数f(i,j)=max{0,}的最大值算法一:暴力求解int MaxSubseqSum1(int A[],int N){int ThisSum,MaxSum=0;int i,j,k;for(i=0;i<N;i++){ for(j=i;j<N;j++) { ...原创 2019-02-27 20:50:11 · 417 阅读 · 0 评论