秒懂算法 | 算法设计的一般过程

2023-05-26 0 230

秒懂算法 | 算法设计的一般过程

透过范例辨认出归纳演算法结构设计的通常操作过程。

01

演算法结构设计的通常操作过程

前述难题五花八门,因此制定出的软件系统也各不相同。因此,演算法的结构设计操作过程是两个灵巧且充满著睿智的操作过程,它明确要求结构斯特默特别针对具体内容的难题结构设计出适宜该难题的软件系统。能说,这是两个神人的缔造操作过程。上面透过许多具体内容难题,体认新体验演算法结构设计的通常操作过程。

【例1-1】布季夫和难题。

求a1~an共n个已连续有理数的和。

布季夫和难题的解操作过程如下表所示: 

(1) 充份认知难题。该问题取值的未知:初始位数a1、常量1、完结位数an和位数特征值n,最终目标是:a1+(a1+1)+(a1+2)+…+an的值。

(2) 难题可视化。能间接用最终目标函数解,生物降解加法演算;也能将最终目标函数a1+(a1+1)+(a1+2)+…+an重新整理呵呵,能获得:na1+[0+1+2+…+(n-1)]=na1+n(n-1)/2,这种能透过做2次加法,1次加法,1次加法、1次加法获得布季夫和。他们还能依照无理数请降式子a1+(a1+1)+(a1+2)+…+an=n(a1+an)/2解,这须要1次加法,1次加法、1次加法便能获得布季夫和。

(3) 演算法结构设计。依照相连和难题的数学模型,演算法结构设计如下表所示: 

第二步,输出a1,an,n;

第三步,排序布季夫和sum; 

第三步,回到结论sum。

(4)校正演算法精确性。请降式是透过严苛的解法推论的,演算法对任一有理数都是恰当的。

(5) 演算法分析。依照演算法结构设计,演算法只须要1次加法、1次加法、1次加法,演算法的耗时为O(1)。

【例1-2】调度难题。

有n个客户带来n项任务,每项加工时间未知,设为ti(i=1,2,…,n)。从0时刻开始,陆续安排到一台机器上加工。每个任务的完成时间是从0时刻到该任务加工完成的时间。为了使尽可能多的客户满意,他们希望找到总等待时间和最少的调度方案,即总完成时间和最短的调度方案。

(1) 充份认知难题。该难题的未知为任务数n、任务的加工时间{t1,t2,…,tn}、到达时刻为0时刻,任务的完成时间=等待时间+加工时间。最终目标为安排调度次序,使n个任务总完成时间和最短。

(2) 难题可视化。设n个任务的集合为S={1,2,…,n},调度方案是n个任务的排列,设为I=(i1,i2,…,in)。其中,I中ij(j=1,2,…,n)的完成时间为秒懂算法 | 算法设计的一般过程调度I的总完成时间和为秒懂算法 | 算法设计的一般过程

将上述和式进一步重新整理得:

秒懂算法 | 算法设计的一般过程

最优调度方案I*的总完成时间和为秒懂算法 | 算法设计的一般过程

(3) 演算法结构设计。从难题数学模型可知,排在第1位的加工时间系数为n,排在第2位、第3位、……、第n位的系数依次递减1,第n位的加工时间系数为1,因此最佳调度方案的排列方法是加工时间短的优先安排。演算法结构设计如下表所示:

第二步,输出S、n个任务的加工时间。

第三步,按照加工时间升序排列。

第三步,排序总完成时间和。

第四步,回到排列,总完成时间和。

(4) 演算法精确性检验。

证明:假设I*不是最佳调度,I′是最佳调度,即fI*>fI′。在调度I′中,至少存在两个相邻任务加工时间逆序,不妨设只有两个相邻任务i,j加工时间逆序。I*序列中为i,j;I′序列中为j,i,则:fI*-fI′=ti-tj。

由于fI*>fI′,因此ti-tj>0,

这与ti<tj矛盾。

故假设不真,I*是最佳调度,证毕。

(5) 演算法分析。该演算法要将任务按照加工时间由小到大排序,若采用堆排序,则耗时O(nlogn)。排序后线性扫描做加法、累加演算,耗时为O(n)。因此,演算法的时间复杂度为O(nlogn)。该演算法消耗的辅助空间是循环变量、排序借用的辅助空间,因此空间复杂度为O(1)。

实例讲解

演算法结构设计与分析

秒懂算法 | 算法设计的一般过程

下期预告

秒懂演算法

递推方程解方法

活动安排难题贪心演算法

哈夫曼编码贪心演算法

Prim演算法

Kruskal演算法

选第二大元素的分治演算法

快速排序演算法中的分治思想

动态规划演算法的基本思想

矩阵连乘难题

0-1背包难题的动态规划改进演算法——跳跃点演算法

子集树数学模型——0-1背包难题的回溯演算法

满m叉树数学模型——图的m可着色难题的回溯演算法

排列树数学模型——旅行商难题的分支限界法

最大网络流的增广路演算法

蒙特卡罗演算法

02

参考书籍

秒懂算法 | 算法设计的一般过程

《演算法结构设计与分析》

ISBN:9787302570721

作者:王秋芬

定价:59.90元

秒懂算法 | 算法设计的一般过程

03

精彩推荐

微信小程序游戏开发│猜位数小游戏(附源码+视频)Flink编程基础│Scala编程初级实践Flink编程基础│FlinkCEP编程实践Flink编程基础│DataStream API编程实Flink编程基础│DataSet API编程实践据分析实战│客户价值分析数据分析实战│价格预测挑战数据分析实战│时间序列预测数据分析实战│KaggleTitanic生存预测

秒懂算法 | 算法设计的一般过程

秒懂算法 | 算法设计的一般过程

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务