第一章 算法设计基础

  1. 算法的五大特性:输入、输出、可行性、有穷性、确定性
    (1)输入:一个算法有零个或多个输入。
    (2)输出:一个算法有一个或多个输出。
    (3)可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现(每步可执行)。
    (4)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。算法的有穷性 意味着不是所有的计算机程序都是算法。
    (5)确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
  2. 算法的复杂性:时间复杂性和空间复杂性

第二章 算法分析基础

大O符号:

[例] T(n)=3n-1
当n≥1时, T(n)= 3n-1≤3n= O(n)

[例] T(n)=5n2+8n+1
当n≥1时,5n2+8n+1≤5n2+8n+n=5n2+9n≤5n2+9n2≤14n2=O(n2)

公式推导递推问题:

常用的时间复杂度:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3) <…<Ο(2n)<Ο(n!) <Ο(nn)

第三章 蛮力法

  • 蛮力法的基本思想:蛮力法依赖的基本技术——遍历技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。

熟记以下问题使用蛮力法的时间复杂度:

  • 冒泡排序:O(n2)
  • 0/1背包:典型子集问题, O(2n)
  • 任务分配:典型排列问题,O(n!)

其它蛮力法的算法时间复杂度:

  • 串匹配:BF算法:O(n*m)、KMP算法:O(n)
  • 选择排序:O(n2)
  • 最近对问题:O(n3)

第四章 分治法

分治法求解三个阶段:1.划分;2.求解子问题;3.合并;

分治法经典算法问题:

  • 数字旋转方阵
  • 归并排序
  • 快速排序
  • 最大字段和

快速排序

#include<iostream>
using namespace std;void Quick(int r[],int first,int end);
int part(int r[],int first,int end);int part(int r[],int first,int end)
{int i=first,j=end;while(i<j){while(i<j&&r[i]<=r[j])  j--; //右侧扫描if(i<j)   //将较小记录交换到前面{int temp=r[i];r[i]=r[j];r[j]=temp;i++;}while (i<j&&r[i]<=r[j])i++;   //左侧扫描if(i<j)//将较大记录交换到后面{int temp=r[i];r[i]=r[j];r[j]=temp;j--;}}return i;
}void Quick(int r[],int first,int end)  //快速排序
{int pivot;if(first<end){pivot=part(r,first,end);//划分,pivot是轴值在序列中的位置;Quick(r,first,pivot-1);//对左侧子序列进行快速排序;Quick(r,pivot+1,end);//对右侧子序列进行快速排序;}
}
int main()
{int r[100],n;cout<<"数组的个数:";cin>>n;for(int i=0; i<n; i++){cout<<"输入第"<<i+1<<"个数:";cin>>r[i];}int first=1,end=n;Quick(r,first-1,end-1);for(int i=0; i<n; i++){cout<<r[i]<<"  ";}return 0;
}

第五章 减治法

基本思想:

  • 原问题划分为若干个子问题。
  • 原问题的解只存在于其中一个较小规模的子问题中,所以只需求解其中一个较小规模的子问题就可以得到原问题的解。
  • 通常可以采用递归来实现。

减治法思想基本设计例子: 两个序列的中位数
附:时间复杂度为O(log2n)

两个序列S1、S2的中位数,分别记为a和b,比较a和b,有下列三种情况:

  • 若a==b,则a或b即为两个序列的中位数;
  • 若a<b,则舍弃S1中a之前和 S2中b之后的元素;
  • 若a>b,则舍弃S2中b之前和 S1中a之后的元素;

假设A的中位数是a , B的中位数是b

(1) 当A、B长度为奇数时
中位数的 左半边个数 == 右半边个数

直接舍弃比a、b中的较小者更小的,和比其较大者更大的即可。

比如:两个给定的序列 A={11, 13, 15, 17, 19}, B={ 2, 4, 10, 15, 20},
写出求解过程及最终结果。

(2) 当A、B长度为偶数时
中位数的左半边个数+1 == 右半边个数,为了保证舍弃的个数相等:

  • 舍弃比a、b中的较小者更小的数时,连中位数一起舍弃;
  • 舍弃比a、b中的较大者更大的数时,不用舍弃中位数;

比如:求序列A和B的中位数,A={6,13,15,16,17,25} , B={4,14,18,22,23,26}
写出求解过程及最终结果。

减治法经典算法问题:

  • 折半查找
  • 二叉查找树
  • 选择问题(数字序列第k小问题)
  • 假币问题

第六章 动态规划法

动态规划法经典算法问题:

  • 数塔问题
  • 最长递增子序列问题
  • 最长公共子序列
  • 0/1背包问题

第七章 贪心法

贪心法经典算法问题:

  • TSP问题
  • 图着色问题
  • 最小生成树(两种算法)
  • 背包问题

第八章 回溯法

回溯法经典算法问题:

  • 素数环问题
  • 图m着色问题
  • 八皇后问题

素数环:

基本思想:从第一个位置开始,每个位置从数字1开始试探,每试探一个数字,检验两个条件:1. 是否被填过,2.当前数字与前面的数字之和是否为素数

代码:

#include <iostream>
#include <cmath>
using namespace std;const int N=20;
int a[N];void PrimeCircle(int n);
int Check(int k,int n);
int Prime(int x);
int main()
{int n;cout<<"请输入一个整数:";cin>>n;PrimeCircle(n);return 0;
}void PrimeCircle(int n)
{int i,k;for(i=0; i<n; i++)a[i]=0;a[0]=1;k=1;while(k>=1){a[k]=a[k]+1;while(a[k]<n)if(Check(k,n)<=n)break;else a[k]=a[k]+1;if(a[k]<=n&&k==n-1){for(i=0; i<n; i++)cout<<a[i]<<"";return;}if(a[k]<=n&&k<n-1)k=k+1;else{a[k]=0;k=k-1;}}
}int Check(int k,int n)
{int flag=0;for(int i=0; i<k; i++)if(a[i]==a[k])return 0;flag=Prime(a[k]+a[k-1]);if(flag==1&&k==n-1)flag=Prime(a[k]+a[0]);return flag;
}int Prime(int x)
{int i,n;n=(int)sqrt(x);for(i=2;i<=n;i++)if(x%i==0)return 0;return 1;
}

第九章 分支限界法

分支限界法经典算法问题:

  • 多段图最短路径问题

算法设计与分析(期末复习重点)更新中相关推荐

  1. 算法设计与分析--期末复习重点总结

    目录 一.算法概述 1.算法的定义与特性 2.数学证明法 3.算法复杂性分析方法 4.渐进分析 二.递归与分治策略 1.递归概念 2.递归算法设计示例 3.递归算法分析 4.分治基本思想 5.分治算法 ...

  2. 算法设计与分析期末复习不挂科

    算法的基本概念 算法概念 通俗讲:算法是解决问题的一种方法或一个过程 严格讲:算法是解某一特定问题的一组有穷规则的集合 且满足以下性质: 有限性:算法在执行有限步之后必须终止 确定性:算法的每一个步骤 ...

  3. 哈工大2019年春算法设计与分析期末复习

    本文原载于我的博客,地址:https://blog.guoziyang.top/archives/22/ 第二章 算法分析的数学基础 2.1 复杂性函数的阶 阶为复杂性函数的主导项. 如函数 T ( ...

  4. 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案.pdf...

    中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...

  5. 算法设计与分析课程复习笔记11——单源最短路径

    算法设计与分析课程复习笔记11--单源最短路径 单源最短路径 最短路径问题 输入:有权有向图G=(V,E) 路径p={ v 0 , v 1 , . . . , v k v_0, v_1, . . . ...

  6. 2020-2021中科院陈玉福算法设计与分析期末考试

    2020-2021中科院陈玉福算法设计与分析期末考试 中科院沈阳计算所 时文康 于2020.12.31 一.(20 分)简答题 1,陈述算法在最坏时间下的时间复杂度和平均时间复杂度:这两种评估算法复杂 ...

  7. 计算机算法设计与分析期末考试试卷,算法设计与分析期末考试卷及答案a

    <算法设计与分析期末考试卷及答案a>由会员分享,可在线阅读,更多相关<算法设计与分析期末考试卷及答案a(15页珍藏版)>请在人人文库网上搜索. 1.一填空题(每空2分,共30分 ...

  8. 国科大计算机算法设计与分析陈玉福,中科院陈玉福计算机算法设计与分析期末简答题答案...

    中科院陈玉福计算机算法设计与分析期末简答题答案 1. 贪心算法和动态规划算法有什么共同点和区别?它们都有那些优势和劣势? 共通点:动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 ...

  9. 计算机算法设计与分析期末试题,算法设计与分析期末考试试卷(D卷)(含答案).doc...

    算法设计与分析期末考试试卷(D卷) 一.选择题(0分,每题分) .D A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐 ...

  10. 算法设计与分析考前复习

    算法设计与分析考前复习 qiwang的NOJ系统在考前一天崩了,强烈建议开发新OJ 另外,由于以下这些题是我上完数电实验用了下午和晚上时间写的,可能会出一些错. 分治法复习 二分查找 描述 给定一个单 ...

最新文章

  1. 第二章 第三节 创建第一个程序
  2. C# 4.0新特性——Optional Parameters
  3. 开源!mathAI 手写拍照自动能解高数题,还不快试试?
  4. 前端学习(1419):ajax请求参数传递
  5. mp4视频转gif图片
  6. gerrit与crowdid, openid集成,设置openIdSsoUrl 直接登录
  7. Python实现本机网络流量监视器
  8. seaJS 模块加载过程分析
  9. java开发学历要求_学Java开发有学历限制要求吗?
  10. mysql5.5.8安装图解_MySQL 5.5.8安装详细步骤-阿里云开发者社区
  11. 小程序学习笔记(2)-简单的小例子了解小程序的语法
  12. 大小端转换代码(宏、函数方式)(浮点、整数)
  13. 整流五 - PWM整流器无差拍控制 一(重复控制算法)
  14. MongoDB Could not find host matching read preference { mode: \primary\ } for set repl_shard1
  15. 软件测试工具大全(这可能是目前为止最全的测试工具集合)
  16. 怎么把做好的ps保存成图片_ps存成jpg格式的快捷键,ps如何另存为图片格式
  17. 软件工程--可行性研究过程详解
  18. html5制作人物动作,炫酷的科技代码人物特效PS动作插件
  19. 《腾讯之道》读书笔记
  20. C#中的DataGridView中添加按钮并操作数据

热门文章

  1. excel职称计算机考试题怎么做,职称计算机考试EXCEL试题「附答案」
  2. 阿里巴巴矢量图标使用
  3. kindle阅读mobi电子书资料共享
  4. “配置系统未能初始化” 的异常一种产生原因
  5. Error:配置系统未能初始化
  6. python xy 2.7下载_pythonxy 安装
  7. 海南省主要城市商品住宅价格分析
  8. 南京邮电大学-IP网络技术重难点突破(江凌云老师课程)
  9. java实现多表代替密码(维吉尼亚密码)
  10. 问题 C: [入门OJ]和||