【算法设计与分析】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,一经查实,立即删除!

相关文章

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;会默…

【算法设计与分析】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 …

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

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

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

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

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

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

Firebug控制台详解

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

标签 href 怎么拼接_【微信】用户-标签的兴趣建模

这一篇分享的是CIKM2020微信的learning to build user-tag profile&#xff0c;主要介绍了微信看一看&#xff08;"Top Stories"&#xff09;中&#xff0c;如何进行用户-标签的兴趣建模&#xff0c;提升推荐效果。1、背景看一下微信看一看场景下的推荐流程&#xff…

【算法设计与分析】05 有关函数的渐进的界的定理

上一篇文章学习了函数的渐近的界定义&#xff0c;本篇文章继续学习函数渐近的界定理。这些定理的证明&#xff0c;用到了函数渐近的界的定义。点击查看上一篇文章&#xff1a;【算法设计与分析】04 函数的渐进的界 文章目录1. 定理11.1 证明定理11.2 估计函数的阶1.3 一些重要的…

一般窗体的设计方式

一般窗体的设计方式&#xff1a; 包含有&#xff08;搜索框、数据列表框、分页框&#xff09;、由搜索返回的数据列表中是否包含“当前页码”、“页数量”的名称来决定显示分页功能。 如果你的搜索框经常性出现大于10个字段的搜索的话&#xff0c;那么应该采用HashTable的参数传…

hive 如何将数组转成字符串_教你如何将Power Logic的原理图转成Orcad的原理图

1、使用Power Logic软件打开pads的原理图(此处使用的是PADS9.5版本的)&#xff1b;2、执行菜单命令&#xff1a;File->Export->在弹出的对话框中点击“保存”按钮&#xff0c;然后选择“Select All”&#xff0c;并选择PADS Logic2005的版本输出&#xff0c;最后点击“OK…

【算法设计与分析】06 几类重要的函数

本篇文章中会用到上一篇文章的定理&#xff1a;【算法设计与分析】05 有关函数的渐进的界的定理 主要学习常见的一些函数的阶 1. 基本函数类 以下按阶的高低排序&#xff1a; 至少指数级&#xff1a; 2n, 3n, n!, …多项式级&#xff1a; n, n2, nlogn, n1/2, …对数多项式级…

【算法设计与分析】07 算法的数学基础

接下来的几篇文章将是学习算法的数学基础内容。 具体的文章包括&#xff08;持续更新&#xff09;&#xff1a;

【算法设计与分析】08 序列求和的方法

本篇文章学习数列求和的一些方法。这些方法对后面学习算法的时间复杂度非常有帮助。 文章目录1. 数列求和公式1.1 二分搜索的时间复杂度求解2 估计和式上届的放大法3 估计和式渐近的界4 总结1. 数列求和公式 下面这几个数列求和公式都是高中学过的公式。 等差、等比数列和调和…

【算法设计与分析】10 差消法化简高阶递推方程

上一篇文章使用递推方程的方法求解了插入排序和二分归并的时间复杂度&#xff0c;本文来求解快速排序的时间复杂度&#xff0c;同样是利用了递推方程法&#xff0c;但是求解该递推方程的方法与以前不一样&#xff1a;差消法 文章目录1. 快速排序的时间复杂度求解2. 总结1. 快速…

python xpath定位打印元素_python基础教程:8种selenium元素定位的实现

前言selenium是一个非常厉害的爬虫利器,不,简直是神器了,它可以自动的控制浏览器,但是你得告诉浏览器,你想干嘛,爬哪里,这时候就要用到元素定位了,在HTML中都有着不同的标签和属性,selenium根据它们来确定你的意图,每个方式都对应两个方法8种方式1.通过 id 定位2.通过 name 定位…

【算法设计与分析】11 递归树

当前面所学习的迭代法、差消法等不太好解决的问题&#xff0c;可以使用递归树&#xff0c;来很方便的解决。 文章目录1. 递归树的概念1.1 迭代在递归树中的表示2. 递归树的生成规则2.1 递归树生成实例2.2 递归树应用实例3. 总结1. 递归树的概念 递归树是迭代计算的模型递归树的…