第10章 算法设计策略和应用实例

合集下载

算法学习的实践案例和实用技巧分享

算法学习的实践案例和实用技巧分享

算法学习的实践案例和实用技巧分享近年来,随着人工智能和大数据的发展,算法学习已经成为了许多人关注的热点话题。

算法学习不仅仅是理论上的学习,更需要通过实践案例和实用技巧的分享来提高自己的能力。

本文将分享一些算法学习的实践案例和实用技巧,希望能够给读者带来一些启发和帮助。

一、实践案例:推荐系统算法推荐系统是目前非常热门的一个研究方向,它可以根据用户的历史行为和偏好,为用户推荐个性化的商品或服务。

在推荐系统算法的学习过程中,我们可以选择一个实际的推荐系统项目作为案例,通过实践来学习和理解不同的推荐算法。

以电商平台为例,我们可以选择一个电商平台的推荐系统项目,通过分析用户的购买历史、浏览行为等数据,来构建一个个性化推荐系统。

在实践过程中,我们可以尝试不同的推荐算法,比如基于协同过滤的算法、基于内容的推荐算法等,通过对比实验来评估不同算法的性能和效果。

通过这样的实践案例,我们不仅能够学习和掌握推荐系统算法的原理和实现方法,还能够了解到推荐系统在实际应用中的挑战和解决方案。

同时,通过实践案例的学习,我们还能够培养自己的问题解决能力和团队合作能力,这对我们未来的职业发展也是非常有帮助的。

二、实用技巧:数据预处理在算法学习的过程中,数据预处理是一个非常重要的环节。

数据预处理可以帮助我们清洗和转换原始数据,以便更好地应用于算法模型的训练和评估。

以下是一些常用的数据预处理技巧:1. 缺失值处理:在实际数据中,经常会出现一些缺失值。

我们可以选择删除包含缺失值的样本,或者通过插值等方法来填补缺失值,以保证数据的完整性和准确性。

2. 数据标准化:不同的特征可能具有不同的量纲和分布,这会对某些算法的性能产生影响。

因此,我们可以通过数据标准化的方法,将不同特征的取值范围映射到相同的区间,以便更好地应用于算法模型。

3. 特征选择:在实际数据中,可能存在一些冗余或无关的特征,这会对算法的训练和预测效果造成负面影响。

因此,我们可以通过特征选择的方法,选择最具有代表性和区分度的特征,以提高算法的性能和效果。

苏科版数学八年级下册第10章《分式小结与思考》教学设计1

苏科版数学八年级下册第10章《分式小结与思考》教学设计1

苏科版数学八年级下册第10章《分式小结与思考》教学设计1一. 教材分析《苏科版数学八年级下册》第10章《分式小结与思考》主要内容包括分式的概念、分式的运算、分式的性质和分式的应用。

本章内容是八年级数学的重要内容,也是初中的难点之一。

通过本章的学习,使学生掌握分式的基本概念和运算法则,提高学生解决实际问题的能力。

二. 学情分析学生在学习本章内容前,已经学习了实数、代数式、方程等知识,具备了一定的数学基础。

但分式的概念和运算对学生来说较为抽象,需要通过实例和练习来加深理解。

同时,学生需要掌握分式运算的技巧和方法,提高解题速度和准确率。

三. 教学目标1.理解分式的概念,掌握分式的基本性质和运算法则。

2.能够运用分式解决实际问题,提高解决问题的能力。

3.培养学生的逻辑思维能力和团队合作能力。

四. 教学重难点1.分式的概念和性质。

2.分式的运算方法和技巧。

3.分式在实际问题中的应用。

五. 教学方法1.采用问题驱动法,引导学生主动探究分式的概念和性质。

2.使用案例教学法,通过实例讲解分式的运算方法和技巧。

3.运用小组合作法,让学生在团队合作中解决实际问题。

六. 教学准备1.准备相关的教学案例和实例,用于讲解和练习。

2.准备分式的运算练习题,用于巩固和拓展。

3.准备投影仪和教学课件,用于展示和讲解。

七. 教学过程1.导入(5分钟)利用实例引入分式的概念,如面积的计算、比例问题等,引导学生思考分式的实际意义。

2.呈现(15分钟)讲解分式的概念和性质,如分式的定义、分式的基本性质等,并通过实例进行解释和展示。

3.操练(20分钟)进行分式的运算练习,如分式的加减乘除等,引导学生掌握分式的运算方法和技巧。

4.巩固(10分钟)让学生自主完成一些分式的运算题目,巩固所学知识,并找出存在的问题。

5.拓展(15分钟)利用分式解决实际问题,如工程问题、经济问题等,让学生运用所学知识解决实际问题。

6.小结(5分钟)对本节课的内容进行总结,强调分式的概念和性质,分式的运算方法和技巧,以及分式在实际问题中的应用。

算法设计与分析课件

算法设计与分析课件
2
ACM国际大学生程序设计竞赛
ACM国际大学生程序设计竞赛(英文 全称:ACM International Collegiate Programming Contest(ACM-ICPC或 ICPC)是由美国计算机协会(ACM)主办 的,一项旨在展示大学生创新能力、团队 精神和在压力下编写程序、分析和解决问 题能力的年度竞赛。经过30多年的发展, ACM国际大学生程序设计竞赛已经发展成 为最具影响力的大学生计算机竞赛。赛事 目前由IBM公司赞助。
主要内容介绍(续)
• • • • 第 7章 第 8章 第 9章 第10章 概率算法 NP完全性理论 近似算法 算法优化策略
1
相关先导基础课程和算法概述
专业基础课程: 数据结构、计算机语言(C++)、操作系统 如何编写计算机程序: • 数据结构+算法 = 程序 • 算法:计算机软件的“灵魂” 算法是计算机科学和计算机应用的核心
1.2 算法复杂性分析
Ω的定义:如果存在正的常数C和自然数N0,使得当NN0时 有f(N)Cg(N),则称函数f(N)当N充分大时下有界,且g(N)是它 的一个下界,记为f(N)=Ω (g(N))。即f(N)的阶不低于g(N)的阶。 θ的定义:定义f(N)= θ (g(N))当且仅当f(N)=O(g(N))且 f(N)= Ω (g(N))。此时称f(N)与g(N)同阶。 o的定义:对于任意给定的ε>0,都存在正整数N0,使得 当NN0时有f(N)/Cg(N)ε,则称函数f(N)当N充分大时的阶比 g(N)低,记为f(N)=o(g(N))。 例如,4NlogN+7=o(3N2+4NlogN+7)。
调试:“调试只能指出有错误,而不能指出它们不存在 错误” 9 作时空分布图:验证分析结论,优化算法设计

常用算法解析及其应用场景

常用算法解析及其应用场景

常用算法解析及其应用场景算法是计算机科学中最基础的概念之一。

在日常生活中,我们无时无刻不在接触着各种算法,从谷歌搜索到智能手机里各种APP的推荐算法,都离不开算法的支持和应用。

在这篇文章中,我将为大家介绍常用的算法和它们的应用场景。

一、排序算法排序算法是程序中最常用的一种算法,其目的是将数据按一定方式进行排列。

常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序。

1、冒泡排序冒泡排序是一种简单的排序算法,它的思路是从头到尾扫描一遍需要排序的数据,每一次将相邻两个元素进行比较并交换位置。

这个过程类似于水泡在水中上浮,一遍扫描结束后,最大的元素就会像水泡一样浮到最上面。

冒泡排序的时间复杂度为O(n²),如果需要排序的数据量很大,那么执行起来会比较慢。

不过它的优点在于代码简单易懂,并且实现起来很容易。

2、选择排序选择排序的思路是每次从数据中选择一个最小(或最大)的元素,并将其放置在序列的起始位置。

按照这样的方式,每次只需要找到一个元素,就可以将数据序列排列好。

选择排序的时间复杂度也为O(n²),但它比冒泡排序要稍微快一点。

3、插入排序插入排序的思路是将数据分为已排序区间和未排序区间两部分。

不断地将未排序区间的元素逐一与已排序区间的元素相比较,找到合适的位置插入。

重复执行这个过程,最终就能将整个数据序列排列好。

插入排序的时间复杂度也为O(n²),但它的执行速度相对于冒泡排序和选择排序要慢一些。

不过它的优点在于它在处理小数据量时非常高效,并且在排序过程中需要的额外内存很少。

4、归并排序归并排序的思路是将数据分成两个子序列,分别进行排序,最后将排序好的子序列进行合并。

在合并的过程中,需要使用到一个额外的数组来存储数据。

归并排序的时间复杂度为O(nlogn),执行效率相对较高。

尤其是在处理大数据量时,它表现得十分出色。

5、快速排序快速排序的思路不同于以上几种排序算法,它是一种分治法的排序算法。

算法的教学实践__案例(3篇)

算法的教学实践__案例(3篇)

第1篇一、背景随着信息技术的飞速发展,算法已经成为现代社会不可或缺的一部分。

在计算机科学、数据科学、人工智能等领域,算法的应用越来越广泛。

为了培养学生的逻辑思维能力、问题解决能力和创新意识,将算法融入教学实践显得尤为重要。

本文以某高校计算机科学与技术专业为例,介绍一种算法的教学实践案例。

二、教学目标1. 理解算法的基本概念和特性。

2. 掌握常用算法的设计与实现方法。

3. 能够运用算法解决实际问题。

4. 培养学生的团队合作精神和创新能力。

三、教学内容1. 算法的基本概念:算法的定义、特性、复杂度等。

2. 常用算法:排序算法(冒泡排序、选择排序、插入排序等)、查找算法(二分查找、顺序查找等)、图算法(广度优先搜索、深度优先搜索等)。

3. 算法设计方法:分治法、动态规划、贪心算法等。

4. 算法实现:使用Python语言实现各种算法。

四、教学实践案例1. 案例背景某高校计算机科学与技术专业开设了一门《数据结构与算法》课程,课程内容涉及算法的基本概念、常用算法、算法设计方法以及算法实现等。

为了提高学生的实践能力,教师决定采用案例教学法,通过一个具体的案例让学生在实践中学习算法。

2. 案例描述案例:某公司需要开发一个图书管理系统,实现以下功能:(1)图书信息录入:包括书名、作者、出版社、出版日期、价格等信息。

(2)图书查询:根据书名、作者、出版社等信息进行查询。

(3)图书借阅:实现图书的借阅、归还功能。

(4)图书统计:统计图书的借阅次数、库存数量等信息。

3. 教学过程(1)引入案例教师首先向学生介绍案例背景,让学生了解图书管理系统的功能和需求。

(2)分析问题教师引导学生分析案例中的问题,明确需要解决的问题,如图书信息录入、查询、借阅、统计等。

(3)设计算法教师带领学生一起设计解决案例中问题的算法,如图书信息录入可以使用链表实现,图书查询可以使用二分查找算法,图书借阅可以使用栈实现,图书统计可以使用哈希表实现。

算法学习中的经典算法实现与应用案例

算法学习中的经典算法实现与应用案例

算法学习中的经典算法实现与应用案例在计算机科学领域中,算法是解决问题的一种方法或步骤的描述。

它是一种确定性的、有限的、有效的计算过程,可以将输入转换为输出。

算法学习是计算机科学的基础,它涉及到各种经典算法的实现和应用。

一、排序算法排序算法是算法学习中最基础也是最常用的一类算法。

它们的目标是将一组元素按照特定的顺序进行排列。

其中,冒泡排序是最简单的一种排序算法,它的基本思想是通过相邻元素的比较和交换来实现排序。

另一个经典的排序算法是快速排序,它基于分治法的思想,通过选择一个基准元素将数组划分为两个子数组,然后递归地对子数组进行排序。

这些排序算法在实际应用中有着广泛的应用。

例如,在搜索引擎中,对搜索结果进行排序可以提高用户的搜索体验。

在电商平台中,对商品进行排序可以帮助用户更快地找到自己想要的产品。

此外,在数据分析和机器学习领域,排序算法也扮演着重要的角色。

二、图算法图算法是解决图论问题的一类算法。

图是由节点和边组成的数据结构,它可以用来表示各种关系和网络。

图算法的应用非常广泛,例如最短路径算法可以用来计算两个节点之间的最短路径,广度优先搜索算法可以用来遍历图中的所有节点,深度优先搜索算法可以用来查找图中的环路等等。

在社交网络中,图算法可以用来发现社区结构和关键节点。

在交通规划中,图算法可以用来寻找最佳路径和优化交通流量。

此外,图算法还被广泛应用于网络安全、电信网络优化、推荐系统等领域。

三、动态规划算法动态规划算法是一种通过将问题分解为子问题并存储子问题的解来解决复杂问题的方法。

它通常用于求解具有重叠子问题和最优子结构性质的问题。

动态规划算法的核心思想是通过利用已解决的子问题的解来构建更大的问题的解。

动态规划算法在实际应用中有着广泛的应用。

例如,在旅行商问题中,动态规划算法可以用来求解最短路径问题。

在背包问题中,动态规划算法可以用来求解最大价值问题。

此外,动态规划算法还被广泛应用于自然语言处理、图像处理、机器人路径规划等领域。

算法设计与分析的一些实例分析

算法设计与分析的一些实例分析

实验一递归与分治策略一、实验目的:熟练掌握递归与分治策略的思想并应用其解决实际问题。

二、递归与分治策略思想基本思想:将要求解的较大规模的问题分割成k个更小规模的子问题。

对这k个子问题分别求解。

如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。

实验题目(1-2):找出从自然数1,2,…,n中任取r个数的所有组合。

算法思想:当组合的第一个数字选定时,其后的数字是从余下的m-1个数中取k-1数的组合。

这就将求m个数中取k个数的组合问题转化成求m-1个数中取k-1个数的组合问题。

设函数引入工作数组a[ ]存放求出的组合,约定函数将确定的k个数字组合的第一个数字放在a[k]中,当一个组合求出后,才将a[ ]中的一个组合输出。

第一个数可以是m、m-1、……、k,函数将确定组合的第一个数字放入数组后,有两种可能的选择,因还未确定组合的其余元素,继续递归去确定;或已确定了组合的全部元素,输出这个组合。

问题描述:找出从自然数1、2、……、n中任取r个数的所有组合。

例如n=5,r=3的所有组合为:(1)5、4、3 (2)5、4、2 (3)5、4、1(4)5、3、2 (5)5、3、1 (6)5、2、1(7)4、3、2 (8)4、3、1 (9)4、2、1(10)3、2、1分析所列的10个组合,可以采用这样的递归思想来考虑求组合函数的算法。

设函数为void find(int m,int k)为找出从自然数1、2、……、m中任取k个数的所有组合。

当组合的第一个数字选定时,其后的数字是从余下的m-1个数中取k-1数的组合。

这就将求m个数中取k 个数的组合问题转化成求m-1个数中取k-1个数的组合问题。

设函数引入工作数组a[ ]存放求出的组合的数字,约定函数将确定的k个数字组合的第一个数字放在a[k]中,当一个组合求出后,才将a[ ]中的一个组合输出。

第一个数可以是m、m-1、……、k,函数将确定组合的第一个数字放入数组后,有两种可能的选择,因还未去顶组合的其余元素,继续递归去确定;或因已确定了组合的全部元素,输出这个组合。

算法设计与分析第10章 算法优化策略 ppt课件

算法设计与分析第10章 算法优化策略 ppt课件

根据前面的讨论,当w是满足四边形不等式的单调函数时,函
数s(i,j)单调,从而
m { m ( i ,k i 1 ) n m ( k ,j ) }m{ m i ( i ,k n 1 ) m ( k ,j )}
i k j
s ( i ,j 1 ) k s ( i 1 ,j )
改进后算法speedDynamicProgramming所需的计算时间为
j
j
m aa x[k]mm ax aa x [k]mb a [j]x
1ijnki
1jn1ij ki
1jn
当b[j-1]>0时b[j]=b[j-1]+a[j],否则b[j]=a[j]。由此可得计算b[j]的
动态规划递归式
b[j]=max{b[j-1]+a[j],a[j]}, 1 j n
public static int maxSum()
15

贪心策略
•采用每次合并集装箱数最少的相邻2堆货物的贪心策略,并不能 得到最优解。
•适当放松相邻性约束,引入相容结点对概念。如图,原始结点用 方形结点表示,合并生成的结点用圆形结点表示。
•最小相容结点对a[i]和a[j] 是满足下面条件的结点对: (1)结点a[i]和a[j] 之间没有方形结点; (2)在所有满足条件(1)的结点中a[i]+a[j]的值最小; (3)在所有满足条件(1)和(2)的结点中下标 i 最小; (4)在所有满足条件(1)(2)和(3)的结点中下标 j 最小。 •相应的最小相容合并树,如图所示。
13

四边形不等式
定义s ( i , j ) m k |m ( i , a j ) m ( x i , k 1 ) { m ( k , j ) w ( i , j )} 由函数m(i,j)的四边形不等式性质可推出函数s(i,j)的单调性,即
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

相同的子问题; 子问题的规模缩小到一定的程度,就不需要再 分解,可以很容易地求解; 所有子问题的解能够合并成原问题的解。
10.1.2 算法设计步骤和程序模式
原问题 问题分解 子问题 求解子问题 子问题解 子问题 求解子问题 子问题解 合并子解 原问题的解 … … 子问题 求解子问题 子问题解
图10-1 分治策略示意图
分析:按照整数乘法的定义,两个n位整数的时间复 杂度为O(n2),而简单的分治策略把两个n位整数的乘法转 换需要4次乘法的m位整数的乘法,并没用降低时间复杂 度,但是通过把乘法次数降为3次,大整数乘法的时间复 杂度为O(n1.58)。
10.1.3 分治策略应用实例
【例10-3】计算一个数列的逆序数量。例如, 已知一个数列3、1、2、5、4,则其中存在三个 逆序:(3,1),(3,2),(5,4),如图 10-2所示。穷举法的用时为O(n2),而采用分治策 略设计的算法时间复杂度为O(nlogn)。 采用分治策略计算逆序数量的基本思想:假 设数列保存在数组a中,将数组a中的元素划分成 大致相等的前后两部分a1和a2,然后分别计算a1 和a2中逆序的数量,最后计算逆序对(ai,aj)的 数量,其中ai是a1中的元素,aj是a2中的元素。
图10-3 拟建运动场示意图
10.2.1最优化问题与最优化原理
2.最优化原理 1951年,美国数学家R.E.Bellman等人根据多阶段决 策问题的特点,提出了解决这类问题的最优化原理 (Principle of optimality)。 最优化原理的数学语言描述为:假设为了解决某一优 化问题,需要依次作出n个决策D1、D2、…、Dn。如果 这个决策序列是最优的,那么对于任何一个整数k(1 < k < n),则Dk+1、Dk+2、…、Dn也是最优的,因为不论 前面k个决策是怎样的,以后的最优决策只取决于前面 决策所确定的当前状态。
第10章算法设计策略及应用实例 (4课时)
本章介绍了算法设计策略和应用实例,主要 目的有两个:首先,让读者知道每种算法的适用 条件,即何时可以使用和何时不能使用某种算 法设计策略;其次,让读者学习基本的算法设 计策略,即掌握如何描述自己的问题和高效、 快速地解决问题。 本章将进一步介绍五种常用算法设计策略的 基本思想和实现方法,这些策略包括分治策略、 贪心策略、动态规划策略、回溯策略和分支限 界策略,以及它们的具体应用实例。
10.2 贪心策略
贪心策略是比较容易的算法设计策略,虽然 它看上去既直观又简单,但是它却可以广泛地应 用于很多问题的求解,如最短路径问题、最小生 成树、Huffman编码、作业调度问题等。本节主 要介绍贪心策略的基本知识,然后给出了贪心策 略应用实例。
10.2.1最优化问题与最优化原理
1.最优化问题 最优化问题是在满足一定的限制条件下,对于一个 给定的优化函数,寻找一组参数值,使得函数值最大或 最小。每个最优化问题都包含一组限制条件和一个优化 函数,符合限制条件的求解方案称为可行解,使优化函 数取得最大(小)值的可行解称为最优解。
10.2.4 贪心策略应用实例
【例10-4】用贪心策略求解活动安排问题。设有n 个活动的集合E={1,2, …,n},其中每个活动都要 求使用同一资源,而在同一时间内只有一个活动 能使用这一资源。每个活动i都有一个要求使用该 资源的起始时间si 和结束时间fi 且si < fi 。如果选 择了活动i,则它在半开时间区间 [si ,fi ) 内占用资 源。若区间[si ,fi )与区间[sj ,fj ) 不相交,则称活动 i与活动j是相容的。也就是说,当si ≥ fj或sj ≥ fi时 ,活动i与活动j相容。 活动安排问题就是要在所给的活动集合中选出数 量最多的相容活动子集合。
10.2.2 贪心策略概述
贪心策略通过一系列步骤来构造问题的解,每一步
都做出当前来看最好的选择,扩展已知的部分解, 直到获得问题的完整解。这种“当前来看最好的选 择”的策略就是该策略名称的来源。 贪心策略求解的问题一般具有以下两个重要的性质
最优子结构性
当一个问题的最优解包含其子问题的最优解时,称此
10.1.1 概述
分治策略是一类算法设计策略,它将原问 题分解成若干部分,从而产生若干子问题,这 些子问题互相独立且与原问题类型相同,然后 解决这些子问题,最后把这些子问题的解合并 成原问题的解。
10.1.1 概述
分治策略所能解决的问题,一般具有以下 三个特征:
原问题可以分解成规模较小、相互独立和类型
10.2.1最优化问题与最优化原理
建运动场的问题可以抽象为最优化问题: (1)限制条件是建筑材料为300米。设x和y分别是矩 形的长和宽,限制条件为:x+2y<=300,x>0,y>0。 (2)代表问题解的优劣是矩形面积,即优化函数表示: f(x,y)=xy。 任何一组满足限制条件“x+2y<=300”的x和y都是可 行解,而使“xy”最大的是最优解。
10.1.3 分治策略应用实例
【例10-2】大整数乘法。在一些像密码技术的应用中, 需要进行超过100位的十进制整数的乘法运算。因为计 算机对于整数字节数的限制,所以无法直接运算大整 数乘积,这就需要研究高效的大整数乘法算法。 设X和Y是两个n位的大整数,采用分治策略的大整 数乘法的基本思想是将n位的整数X和Y都分成两部分, m m ,则 n / 2 X A 10 B 每部分的长度约为 和 Y C 10m D。 因此
可行性,即贪心选择必须满足问题的约束;
局部最优性,即贪心选择是当前步骤中所有可行
选择中最佳的局部选择; 不变性,即一旦做出选择,在算法的后面步骤中 就无法改变。
10.2.2 贪心策略概述
总结
贪心策略求解的问题需要具备两个性质: 第一,最优子结构性质; 第二,贪心选而第二条 性质是决定使用贪心策略的关键。具备第一条 性质的问题,如果不具备贪心选择性,而是具 备子问题重叠性,则考虑用动态规划策略设计 算法。
如图10-1所示,采用分治策略的算法设计都包括分解、求 解和合并三个步骤: (1)分解:将原问题分解为若干个规模较小、相互独立、 与原问题类型相同或相似的子问题; (2)求解:若子问题缩小到容易解决的规模,则直接求 解,否则递归地求解子问题; (3)合并:将各个子问题的解合并为原问题的解。
10.1.2 算法设计步骤和程序模式
分治策略的一般程序模式如下: divide-and-conquer(P) { if ( Small(P) ) return S(P); else { //把问题 P 分解成成子问题P1,P2,...,Pk (k 1); for(i=1;i<=k;i++) yi=divide-and-conquer(Pi); return combine(y1,...,yk); } }
【例10-1】矩阵乘积问题。因为矩阵可以方便地表示 两个集合中元素之间的关系,所以被用于通信网络和交通 运输系统等模型,在这些模型中经常用到矩阵的乘法。根 据矩阵乘积的定义,两个 n 阶矩阵乘积的时间复杂度为 O(n3) 。 Strassen 根据分治策略设计矩阵乘积的算法,降 低时间复杂度。 假设 n为 2的整数幂, A、 B、 C都是 n 阶的矩阵,每个 矩阵可以分解成4个n/2阶的矩阵。
10.2.4 贪心策略应用实例
【例10-5】任务调度问题。每项任务需要一个单 位的工作时间,并且每项任务都有一个截止时间 和奖励。如果任务在截止时间之前开始,就可以 获得奖励,否则就不能获得奖励。问题是如何安 排任务以获得最多的奖励。注意不需要完成所有 任务。
10.2.4 贪心策略应用实例
例如,表10-1所示的任务调度问题实例,任务1的截止时间为2指 的是任务1要在时间1或者时间2开始,否则就超过截止时间。任务 2的截止时间为1意味着任务2只能在时间1开始。因此,可能的任 务调度有[1, 3]、[2, 1]、[2, 3]、[3, 1]、[4, 1]、[4, 3]。通过观察发 现,一种合理的贪心选择策略如下:先按照任务的奖励从高到低 排序,根据这个顺序检查每个任务,如果满足截止时间的约束就 加入该任务。 表10-1任务调度问题实例 任务 截止时间 奖励 1 2 30 2 1 35 3 2 25 4 1 40
最后,矩阵乘积的结果由7个矩阵得出。
10.1.3 分治策略应用实例
C11 C12 M 1 M 4 M 5 M 7 C M2 M4 C21 C22 M1 M 3 M 2 M 6 M3 M5
分析:按照矩阵的定义,两个n阶矩阵乘积 中有n2个元素,计算每个元素需要n次乘法和 (n-1)次加法,所以需要n3次乘法和n2(n-1)次加 法,其时间复杂度为O(n3),而通过分治策略设 计的矩阵乘积算法可以降低时间复杂度为 O(n2.81)。
10.2.3 算法设计步骤及程序模式
贪心策略的算法设计步骤一般分为四步:
建立数学模型来描述问题;
把求解的问题分成若干个子问题;
求解子问题,得到子问题的局部最优解; 通过贪心选择,扩展子问题的局部最优解,直到
构成问题的完整解。
10.2.3 算法设计步骤及程序模式
贪心策略的程序模式一般为: Greedy(C) //C是问题的输入集合,即候选集合 { S={ }; //初始解集合为空集 while (not Solution(S)) //集合S没有构成问题的一个解 { x=Select(C); //在候选集合C中做贪心选择 if Feasible(S, x) //判断集合S中加入x后的解是否可行 { S=S+{x}; C=C-{x}; } } return S; }
C11 C12 A11 C 21 C22 A21 A12 B11 A22 B21 B12 B22
10.1.3 分治策略应用实例
Strassen计算如下7个矩阵。
相关文档
最新文档