第1章 算法概述(穷举算法)

重要人物:Alan Turing(图灵机)、Donald Knuth(TEX系统)

算法:解决问题的一种方法或一个过程
特性:有穷性(Finiteness)、确定性(Definiteness)、可行性(effectiveness)、输入(Input)、输出(Output)
程序:算法+数据结构

计算时间的渐进表示
多项式时间算法(polynomial time algorithm):O(1) < O(logn) < O(n) < O(nlogn) < O(n2)< O(n3)
指数时间算法(exponential time algorithm):O(2n) < O(n!) < O(nn)

算法复杂性:算法所需要的计算机资源
时间复杂性:随着问题规模n的增大,算法运行时间与问题规模n的某个函数f(n)增长率相同,记时间复杂度为T(n)=O(f(n))
空间复杂性:算法所需空间大小,记为S(n)=O(f(n)),不消耗辅助空间的操作称为原地操作
渐近分析的记号:渐进上界记号O、渐进下界记号Ω\OmegaΩ、非紧上界记号o、非紧下界记号ω\omegaω、紧渐近界记号Θ\ThetaΘ

穷举算法

例1. 鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?
Cock+Hen+Chick=100
Cock5+Hen3+Chick/3=100

代码:

#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{int x,y,z;x=0;while(x<=20){y=0;while(y<34){z=100-x-y;if((5*x+3*y+z*1.0/3)==100){printf("Cock is %d,Hen is %d,Chick is %d\n",x,y,z);}y++;}x++;}return 0;
}

例2. Google方程式
有一个字符组成的等式:WWWDOT - GOOGLE = DOTCOM
1)每个字符代表一个0-9之间的数字;
2)WWWDOT、GOOGLE和DOTCOM都是合法的数字;
3)不能以0开头。请找出一组字符和数字的对应关系,使它们互相替换,并且替换后的数字能够满足等式.

代码1:

/*暴力搜索(穷举)
*/
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{int w,d,o,t,g,l,e,c,m;int A,B,C;w=1;while(w<=9){d=1;while(d<=9){if(d==w){d++;continue;}o=0;while(o<=9){if(o==w||o==d){o++;continue;}t=0;while(t<=9){if(t==w||t==d||t==o){t++;continue;}g=1;while(g<=9){if(g==w||g==d||g==o||g==t){g++;continue;}l=0;while(l<=9){if(l==w||l==d||l==o||l==t||l==g){l++;continue;}e=0;while(e<=9){if(e==w||e==d||e==o||e==t||e==g||e==l){e++;continue;}c=0;while(c<=9){if(c==w||c==d||c==o||c==t||c==g||c==l||c==e){c++;continue;}m=0;while(m<=9){if(m==w||m==d||m==o||m==t||m==g||m==l||m==e||m==c){m++;continue;}A=w*100000+w*10000+w*1000+d*100+o*10+t;B=g*100000+o*10000+o*1000+g*100+l*10+e;C=d*100000+o*10000+t*1000+c*100+o*10+m;if(A==(B+C)){cout<<"answer: "<<A<<" - "<<B<<" = "<<C<<endl;}m++;}c++;}e++;}l++;}g++;}t++;}o++;}d++;}w++;}return 0;
}

代码2:

/*递归搜索(回溯)
*/
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef struct tagcharitem  //数据结构
{char c;int value;
} charitem; charitem a[]=           //初始化
{{'W',-1},{'D',-1},{'O',-1},{'T',-1},{'G',-1},{'L',-1},{'E',-1},{'C',-1},{'M',-1}
};int mark[10];   //标记数组void search(int cnt)    //对字母进行搜索 最后判断下
{if(cnt==10){int sum1=a[0].value*1e5+a[0].value*1e4+a[0].value*1e3+a[1].value*1e2+a[2].value*10+a[3].value;int sum2=a[4].value*1e5+a[2].value*1e4+a[2].value*1e3+a[4].value*1e2+a[5].value*10+a[6].value;int sum3=a[1].value*1e5+a[2].value*1e4+a[3].value*1e3+a[7].value*1e2+a[2].value*10+a[8].value;if(sum1-sum2==sum3)cout<<sum1<<"-"<<sum2<<"="<<sum3<<endl;return;}for(int i=9; i>=0; i--) //为字母赋值,W更可能为较大值{if(mark[i]!=0) continue;if((cnt==0||cnt==4||cnt==2)&&i==0) continue; //剪枝:开头为0a[cnt].value=i;mark[i]=1;search(cnt+1);a[cnt].value=-1;mark[i]=0;}
}int main()
{memset(mark,0,sizeof(mark));search(0);return 0;
}

算法设计与分析第1章 算法概述相关推荐

  1. (算法设计与分析)第一章算法概述-第一节:算法基本概念和算法复杂性分析

    文章目录 一:算法与程序 (1)算法的定义 (2)算法的五大特征 (3)算法与程序的区别 (4)算法的描述方法 二:算法复杂性分析 (1)时间复杂度 A:算法时间复杂度表示方法 B:表示算法渐进时间复 ...

  2. 算法设计与分析第七章分支限界算法(完结篇)

    算法设计与分析第七章分支限界算法 一.分支界限算法概述 1.分支限界法类似于回溯法,是一种在问题的解空间树上搜索问题解的算法. 分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解 ...

  3. 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )

    复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...

  4. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

  5. 【算法设计与分析】14 分治算法的一般描述和分析方法

    本文主要描述分治算法的一般描述和分析方法.衔接上一篇文章:[算法设计与分析]13 分治策略的设计思想 文章目录 1 分治算法的一般性描述 1.1 分支算法的时间分析 1.2 两类常见的递推方程与求解方 ...

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

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

  7. 算法设计与分析第5章 回溯法(二)【回溯法应用】

    第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...

  8. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  9. [XJTUSE 算法设计与分析] 第五章 回溯法

    第五章 回溯法 填空题会有代码填空,大题会手动回溯 学习要点 理解回溯法的深度优先搜索策略. 掌握用回溯法解题的算法框架 (1)递归回溯 (2)迭代回溯 (3)子集树算法框架 (4)排列树算法框架 5 ...

最新文章

  1. G6实现标签拖动连线画流程图
  2. 记一笔冒泡排序和对它的优化
  3. 微信小程序 没有找到可以构建的npm包
  4. 制作 Windows8   to Go
  5. Swift 面向协议编程 基础篇 (一) 介绍
  6. android q哪些手机型号,华为公布8款安卓Q首批升级机型
  7. 问题 B: 编写函数:Swap (I) (Append Code)
  8. 缺钱的特斯拉,是否在走向“乐视化”?
  9. 苹果电脑如何读写ntfs格式磁盘
  10. 华为hbase二级索引(secondary index)细节分析
  11. 深入理解OracleExadata
  12. SQL面试经典题(含答案)
  13. 远程培训教程之POWERPOINT2003
  14. 【matlab之熵权法计算指标权重】
  15. YUY2和MJPG视频编码格式区别
  16. linux -----各种颜色代表什么
  17. c语言程序设计行李管理系统,行李全流程管控C位登场,让你Cue到行李人的努力了嘛?...
  18. 系统工程原理(持续更新):3.方法论--霍尔“三维结构”模型
  19. 手机市场变天:荣耀鸣枪,重回舞台中央?
  20. 链传动运动仿真(motion分析)制作包含源文件

热门文章

  1. 2022-2028年中国散热产业深度调研及投资前景预测报告(全卷)
  2. 最常见NLP任务练手项目汇总
  3. leetcode 567. Permutation in String 字符串的排列 滑动窗口法
  4. SpringBoot (六) :SpringBoot定时器实现(简单入门)
  5. docred数据集情况笔记
  6. 正则表达式中的\.表示什么意思
  7. hexo框架个人博客的搭建(面试加分!)
  8. CUDA上深度学习模型量化的自动化优化
  9. TVM优化Deep Learning GPU算子
  10. 简化可视SLAM应用程序的开发