【算法设计与分析】01 算法涉及的研究内容概述

文章目录

    • 1 算法的研究内容
    • 2 算法设计的两个例子
      • 2.1 调度问题
      • 2.2 算法设计的步骤
      • 2.3 投资问题
    • 3 总结

在学习算法涉及与分析的内容之前,先了解一下算法所涉及的几个大块的内容,方便以后学习。

1 算法的研究内容

  • 算法的研究内容主要包括三点:
  1. 计算复杂性理论
  2. 问题复杂度概念
  3. 算法设计与分析

其中我们主要学习的内容是算法的设计与分析。

在学习算法的过程中,还需要学习相关的概念:

  1. 算法的伪码表示
  2. 算法及其时间复杂度的定义
  3. 几类重要函数的性质
  4. 有关函数渐进的届的定理
  5. 时间复杂度函数的表示:函数渐进的界

以上五点会在后面的文章中逐一学习。

2 算法设计的两个例子

2.1 调度问题

  • 问题:有n项任务,每项任务加工时间已知,从 0时刻开始陆续安排到一台机器上加工,每个任务的完成时间是从 0 时刻到任务加工截止的时间。
  • 求:总完成时间 最短的安排方案(所有任务完成时间之和)。

实例:
任务集 S = {1, 2, 3, 4, 5},
加工时间: t1=3, t2=8, t3=5, t4=10, t5=15

  • 贪心法的解:

算法:按加工时间(3,8,5,10,15) 从小到大安排

解:加工产品的顺序:1, 3, 2, 4, 5 。

https://raw.githubusercontent.com/Lyy0217/CSLN-Pic/master/01-%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%88%86%E6%9E%90pic/1560500922461.png

总的完成时间为:

t = 3+(3+5)+(3+5+8)+(3+5+8+10)+(3+5+8+10+15)
= 3×5 + 5×4 + 8×3 + 10×2 + 15
= 94

(注意规律)

针对上面的加工调度问题,在数学中有一整套建模的流程来求解。

问题建模:

  1. 输入:任务集:S={1,2,3,…,n},第j项任务加工时间:tj ∈\in Z+ , j=1,2…,n
  2. 输出:调度I,S的排列为:i1,i2,…,in
  3. 目标函数:I的完成时间。t(I)=∑k=1N(n−k+1)tik\sum_{k=1}^N (n-k+1)t_{i_{k}}k=1N(nk+1)tik
  4. 解 I* :使得t(I*)达到最小,即:t(I *)=min{t(I) | I为S的排列}

对于上述调度问题的贪心算法,对于所有输入实例都得到最优解,可以给出如下的证明过程:

证明:假设调度f的第i,j项任务相邻且有逆序,即ti > tj ,交换任务i和j得到调度g,

在算法的设计过程中,各种各样的算法设计都需要有严格的证明验证所有实例都可以通过该算法达到最终的解。上面解决调度问题的时候,是凭直觉来使用贪心算法,但是直觉往往不正确。如下面的例子。

反例:

有4 件物品要装入背包, 物品重量和价值如下:

标号1234
重量 wi3452
价值 vi7992

背包重量限制是 6,问如何选择物品,使得不超重的情况下装入背包的物品价值达到最大?

直觉的解法是贪心算法:单位重量价值大的优先,总重量不超过6.

按照ViWi\frac{V~i~}{W~i~}W i V i  从大到小排序,1,2,3,4

73\frac{7}{3}37 >94\frac{9}{4}49> 95\frac{9}{5}59 >22\frac{2}{2}22

  • 贪心法的解: { 1, 4 },重量 5,价值为 9
  • 更好的解: { 2, 4 },重量 6,价值 11

2.2 算法设计的步骤

所以在进行一个算法的设计时,需要以下几个步骤:

  1. 问题建模
  2. 选择什么算法,如何描述这个算法?
  3. 这个算法是否对所有实例都得到最优解?如何证明?
  4. 如果不是,能否找到反例

每一个算法的设计,都需要遵循上述四个规则。

2.3 投资问题

  • 问题:m元钱,投资n个项目,效益函数fi (x),表示第i个项目投资x元钱的效益,i=1,2,…,n。
  • 求:如何分配,每个项目的钱数,使得总效益最大。

实例:5 万元,投资给 4 个项目,效益函数:

xf1(x)f2(x)f3(x)f4(x)
00000
1110220
21251021
313103022
414153223
515204024

首先对这个问题进行数学建模:

  • 输入:n,m,fi (x),i=1,2,…,n,x = 1,2, …, m 。
  • 解:n维向量<x1, x2, … , xn >,xi 是第i个项目的钱数,使得下述条件满足:

目标函数:max∑i=1nfi(x)\sum_{i=1}^n f_i (x)i=1nfi(x)

约束条件:∑i=1nxi=m\sum_{i=1}^n x_i =mi=1nxi=m ,xi ∈\in n;

上述就是一个数学的建模过程,最终的算法设计就是针对上述数学模型进行求解域优化。

在我们学习算法设计之前,先给出这道题的一个蛮力算法:

  1. 对所有满足下述条件的向量<x1,x2,…,xn>

    x1+ x2 + … + xn = m ; xi 为非负整数, i = 1, 2 , …, n 。

  2. 计算相应的效益:

    f1(x1) + f2(x2) + … + fn(xn)

从中确认效益最大的向量。

实例计算:

https://raw.githubusercontent.com/Lyy0217/CSLN-Pic/master/01-%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%88%86%E6%9E%90pic/1561486060934.png

解: s=<1,0,3,1>,
最大效益: 11+30+20 = 61

以上就是使用蛮力算法得出的额结果,结果肯定是对的,但是效率肯定不高。

  • 蛮力算法的效率:

方程 x1 + x2 + … + xn = m 的非负整数解
< x1, x2, …, xn > 的个数估计:

可行解表示成 0-1 序列: m 个1,n-1个 0

https://raw.githubusercontent.com/Lyy0217/CSLN-Pic/master/01-%E7%AE%97%E6%B3%95%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%88%86%E6%9E%90pic/04.png

例如:n=4,m=7。可行解的一个为:<1, 2, 3, 1> ⇔ 序列 1 0 1 1 0 1 1 1 0 1

该解得序列的个数是输入规模的指数函数:

C(m+n-1,m)

=(m+n−1)!m!(n−1)!\frac{(m+n-1)!}{m! (n-1)!}m!(n1)!(m+n1)!

= Ω ((1+ε )m+n-1)

指数级是一个很大的数量级!!!有没有更好的算法? 在后面的学习中,会学习到更好的算法。

3 总结

问题求解的关键:

  1. 建模:对输入参数和解给出形式化或者半形式化的描述
  2. 设计算法:采用什么算法设计技术?以及它的正确性:是否对所有实例都得到正确的解?
  3. 分析算法:效率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解题报告 百进制数

题目 4. 百进制数 &#xff08;hex.pas/c/cpp&#xff09; 【问题描述】 科学进步飞快&#xff0c;日新月异&#xff0c;人们早已经不再习惯十进制那种单调的表示数字的方式。最近&#xff0c;Y同学投入百进制数的研究中。两个百进制数可以相邻当且仅当前一个百进制数的最后一位…

python 遗传算法 agv_基于改进遗传算法的AGV路径规划

基于改进遗传算法的AGV路径规划苑光明&#xff0c;翟云飞&#xff0c;丁承君&#xff0c;张鹏【摘要】&#xff3b;摘要&#xff3d;针对AGV在自动化生产线中原有路径规划算法存在路径拐弯次数多&#xff0c;不利于AGV自动控制的问题&#xff0c;提出了一种改进遗传算法。为提高…

CSDN博客图片水印|自定义水印|去除水印

参考博文1&#xff1a;https://blog.csdn.net/stereohomology/article/details/54561782 参考博文2&#xff1a;https://blog.csdn.net/u011479200/article/details/81026798 CSDN改版后&#xff0c;原来的修改方法不行了~~ 在 CSDN 中&#xff0c;上传图片时&#xff0c;会默…

win2003 定时重启BAT

echo offat 2:00 /every:M,T,W,Th,F,S,Su %windir%\system32\shutdown.exe /recho 设置完成&#xff0c;请按任意键退出……pause>nul 运行后计划任务中会新增一个JOB 很简单的&#xff0c;记录一下免得忘记 转载于:https://www.cnblogs.com/relax/archive/2011/10/18/22160…

【算法设计与分析】02 货郎问题与计算复杂性理论

什么是NP系列问题&#xff1f;今天来看看这些问题。 文章目录1 货郎问题2 0-1背包问题3 什么是NP-hard问题&#xff08;NP难问题&#xff09;1 货郎问题 问题&#xff1a;有n个城市&#xff0c;已知任何两个城市之间的距离&#xff0c;求一条每个城市恰好经过1次的回路&#xf…

ad17编辑界面怎么检查未连线_软件账务处理流程之——凭证审核与检查

金蝶是我们财务人非常熟悉的财务软件&#xff0c;但是我们很多财务人只在应用软件的时候还是会出现很多的问题&#xff0c;为了帮助大家更好地应用这个软件&#xff0c;今天就来和大家讲讲关于金蝶软件凭证审核与检查的一些基本处理流程。凭证审核凭证输入完成后&#xff0c;更…

快速可扩展的Ajax流代理——提供持续下载跨域数据

简介 由于浏览器禁止跨域的XMLHTTP调用&#xff0c;所有的Ajax网站都必须有一个服务端代理来从外部域比如Flickr或者Digg来抓去内容。对客户端Javascript代码来说&#xff0c;一个XMLHttp的调用将请求传递给宿主在相同域里的服务端代理&#xff0c;然后由代理来从外部服务器上下…

Markdown编辑器 公式指导手册

#Cmd Markdown 公式指导手册 标签&#xff1a; Tutorial 2018-03-20 补档&#xff1a; 收到很多小伙伴对本文的源文档转载需求&#xff0c;故传了一份 md 文件&#xff0c;请按需 下载 。 本文固定链接: https://www.zybuluo.com/codeep/note/163962 点击跳转至 Cmd Markdown …

python建db文件_临时数据库之python用sqlite3模块操作sqlite

SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程&#xff0c;并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库。一些应用可是使用SQLite保存内部数据。它也可以在构建应用原型的时候使用&#xff0c;以便于以后转移到更大型的数据库。…

MDX as的使用

用到as的时候&#xff0c;如果用到了某个纬度&#xff0c;例如&#xff1a;withmember mydate as now()member [告警投诉数量a] as lookupcube("[ALARM_RECORD]","[Measures].[告警投诉数量]") member [故障总量啊] as lookupcube("[EOMS_FAULT_RECO…

【算法设计与分析】03 算法及其时间复杂度

在学习算法的时间复杂度之前&#xff0c;需要了解下面5条概念 什么是算法的时间复杂度&#xff1f; 针对指定基本运算&#xff0c;计数算法所做的运算次数。什么是基本运算&#xff1f;比较、加法、乘法、置指针、交换…什么是输入规模&#xff1f;输入串的编码长度&#xff0c…

用单片机测量流体流速的_影响超声波流量计(热量表)测量精度的主要因素

1、上下游直管段的影响由于时差式超声波流量计标定系数K值是雷诺数函数&#xff0c;所以当流体从层流过渡到紊流时&#xff0c;其流速分布不均匀&#xff0c;标定系数K值将产生较大的变化&#xff0c;从而影响测量准确度。根据设计要求换能器应安装在上游直管段为10倍管径、下游…

【算法设计与分析】04 函数的渐进的界

今天学习函数的渐进的界&#xff0c;会涉及多种数学符号。对以后学习分析算法复杂度有很大的帮助。 1 大OOO符号 定义&#xff1a; 设 f 和 g是定义域为自然数集N上的函数. 若存在正数 c 和 n0&#xff0c; 使得 对一切 n ≥\geq≥ n0有: c≤f(n)≤cg(n)c\leq f(n) \leq cg(n…

11月10日 14:00~16:00 上海敏捷开发沙龙

主题&#xff1a;火星人陈勇将赴上海主办线下沙龙&#xff0c;主题是“自组织团队与松结对编程”&#xff08;2011 微软 TechED演讲主题&#xff09;&#xff0c;演讲后有团队问答PK活动。日期&#xff1a;2011年11月10日时间&#xff1a;下午14&#xff1a;00&#xff5e;16&a…

c语言头文件和源文件_C语言头文件防卫式声明

C语言一般提供三种预处理功能&#xff1a;宏处理、文件包含、条件编译。头文件防卫式申明中会用到条件编译中 #ifndef、#define、#endif 的用法。所以&#xff0c;首先价绍下条件编译。1 条件编译一般情况下&#xff0c;在生成可执行文件的过程中&#xff0c;源程序文件中的所有…

tomcat原理,一个客户端请求的处理过程

假设来自客户的请求为&#xff1a;http://localhost:8080/wsota/wsota_index.jsp1) 请求被发送到本机端口8080&#xff0c;被在那里侦听的Coyote HTTP/1.1 Connector获得2) Connector把该请求交给它所在的Service的Engine来处理&#xff0c;并等待来自Engine的回应3) Engine获得…

python定义函数需要保留字def_定义函数时要用到哪一个python保留字?_学小易找答案...

【简答题】常见的足部畸形有哪些?例举6种以上。【其它】请将会计学小册子第四章完成情况(选择判断业务题2. 6.)的所有内容拍照上传嗷【其它】以小组为单位进行现场调研,对足球场外的广场区域植物造景进行统计,每个同学利用CAD软件对该场地进行绘图,掌握园林中自然式绿地的植物…

aop编程时出现错误信息:java.lang.NoClassDefFoundError

代码错误信息&#xff1a; org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘calImpl’ defined in file [/Users/lyy0217/Downloads/SSM/target/classes/com/cm/service/aop/CalImpl.class]: BeanPostProcessor before instantiat…

Firebug控制台详解

作者&#xff1a; 阮一峰 日期&#xff1a; 2011年3月26日 Firebug是网页开发的利器&#xff0c;能够极大地提升工作效率。 但是&#xff0c;它不太容易上手。我曾经翻译过一篇《Firebug入门指南》&#xff0c;介绍了一些基本用法。今天&#xff0c;继续介绍它的高级用法。 Fi…