数据结构与算法实战作业指导书_第1页
数据结构与算法实战作业指导书_第2页
数据结构与算法实战作业指导书_第3页
数据结构与算法实战作业指导书_第4页
数据结构与算法实战作业指导书_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构与算法实战作业指导书TOC\o"1-2"\h\u22153第1章线性表 3266001.1线性表的基本概念 3274301.2线性表的实现 330791.3线性表的操作 330597第2章栈和队列 484112.1栈的基本概念和实现 478952.1.1栈的基本概念 4160262.1.2栈的实现 4151372.2栈的操作与应用 5305402.2.1栈的操作 576712.2.2栈的应用 518272.3队列的基本概念和实现 5102492.3.1队列的基本概念 551912.3.2队列的实现 5302582.4队列的操作与应用 6251362.4.1队列的操作 661212.4.2队列的应用 615572第3章链表 787683.1链表的基本概念 7169373.2单链表的实现 7194133.3双向链表和循环链表 99419第4章排序算法 9249354.1冒泡排序 963464.2选择排序 1081694.3插入排序 10255774.4快速排序 1010306第5章查找算法 1153345.1顺序查找 1187485.1.1概述 11166765.1.2算法描述 1137785.1.3时间复杂度 11266345.2二分查找 1142825.2.1概述 11184925.2.2算法描述 12244345.2.3时间复杂度 12105765.3哈希查找 128035.3.1概述 12239555.3.2算法描述 12112635.3.3时间复杂度 1210038第6章树与二叉树 13171666.1树的基本概念 13174706.2二叉树的遍历 1328076.3线索二叉树 13160306.4二叉树的存储结构 146178第7章图 14190367.1图的基本概念 14252977.2图的表示方法 1424877.3图的遍历 1528547.4最短路径算法 154006第8章动态规划 15261588.1动态规划的基本概念 15315328.1.1动态规划的定义 15257028.1.2动态规划的特点 1567288.2动态规划的基本方法 1695668.2.1自顶向下的带记忆化搜索 16147478.2.2自底向上的迭代求解 16269698.3动态规划的应用实例 16117608.3.1最长公共子序列 16228228.3.2背包问题 16202968.3.3最小路径和 1675548.3.4股票买卖问题 166436第9章贪心算法 17191369.1贪心算法的基本概念 175319.2贪心算法的设计方法 1727089.3贪心算法的应用实例 1727864第10章算法设计与分析 183203610.1算法设计策略 182653510.1.1引言 182146510.1.2分治策略 182105610.1.3动态规划策略 183162210.1.4贪心策略 18254910.1.5回溯法 18635610.2算法效率分析 182941110.2.1引言 182896010.2.2时间复杂度 181225710.2.3空间复杂度 19996910.2.4渐进分析 192820910.3算法功能优化 19773810.3.1引言 192347010.3.2算法改进 192402210.3.3数据结构优化 193232610.3.4编码技巧 192584010.3.5算法并行化 19第1章线性表1.1线性表的基本概念线性表(LinearList)是数据结构中的一种基本类型,它由一系列元素组成,这些元素可以是数字、字符或任何其他类型的数据。线性表的特点是元素之间存在着一对一的线性关系,即除了第一个元素和最后一个元素外,每个元素都有且一个前驱和一个后继。在形式上,一个线性表可以表示为一个有限序列:L=(a1,a2,a3,,an),其中a1是线性表的第一个元素,an是最后一个元素,n是线性表的长度。如果n=0,则线性表为空。线性表的基本操作包括插入、删除、查找、遍历等。1.2线性表的实现线性表的实现方式主要有两种:顺序存储结构和链式存储结构。(1)顺序存储结构顺序存储结构是指用一段连续的存储单元依次存储线性表中的元素。这种实现方式具有随机访问的特点,即可以在O(1)的时间复杂度内访问到线性表中的任意元素。顺序存储结构的缺点是插入和删除操作的时间复杂度较高,通常为O(n)。(2)链式存储结构链式存储结构是指通过指针连接线性表中的元素,形成一种链式结构。链式存储结构包括单向链表、双向链表和循环链表等。链式存储结构的主要优点是插入和删除操作的时间复杂度较低,通常为O(1)。但随机访问的时间复杂度为O(n),因为需要从头节点开始遍历。1.3线性表的操作线性表的操作主要包括以下几种:(1)插入操作在线性表中插入一个元素,可以在表的头部、尾部或任意位置进行。插入操作的时间复杂度取决于插入位置,最坏情况为O(n)。(2)删除操作删除线性表中的一个元素,同样可以在头部、尾部或任意位置进行。删除操作的时间复杂度同样取决于删除位置,最坏情况为O(n)。(3)查找操作查找线性表中的元素,可以在O(n)的时间复杂度内找到目标元素的位置。如果线性表采用顺序存储结构,则可以使用二分查找算法将查找时间复杂度降低到O(logn)。(4)遍历操作遍历线性表,即将线性表中的每个元素依次访问一遍。遍历操作的时间复杂度为O(n)。(5)排序操作对线性表进行排序,可以将元素按照一定的顺序排列。排序算法有冒泡排序、选择排序、插入排序、快速排序等,时间复杂度从O(n^2)到O(nlogn)不等。第2章栈和队列2.1栈的基本概念和实现2.1.1栈的基本概念栈(Stack)是一种特殊的线性表,其操作仅限于表的一端,这一端被称为栈顶(Top),另一端被称为栈底(Bottom)。栈的操作遵循“先进后出”(FirstInLastOut,FILO)的原则。栈的主要操作包括入栈(push)和出栈(pop)。2.1.2栈的实现栈可以通过数组或链表来实现。以下分别介绍这两种实现方式:(1)数组实现使用数组实现栈时,需要指定栈的最大容量。栈的初始化、入栈和出栈操作如下:初始化:设定栈的最大容量,将栈顶指针设置为1。入栈:判断栈是否已满,若未满,将元素插入栈顶,并将栈顶指针加1。出栈:判断栈是否为空,若不为空,返回栈顶元素,并将栈顶指针减1。(2)链表实现使用链表实现栈时,链表的头部作为栈顶。栈的初始化、入栈和出栈操作如下:初始化:创建一个空链表。入栈:在链表头部插入一个新节点,存储元素。出栈:删除链表头部的节点,并返回其存储的元素。2.2栈的操作与应用2.2.1栈的操作栈的基本操作包括入栈、出栈、判断栈空、判断栈满和获取栈顶元素。(1)入栈(push)将一个元素插入栈顶。(2)出栈(pop)删除栈顶元素,并返回。(3)判断栈空判断栈是否为空。(4)判断栈满判断栈是否已满(仅适用于数组实现)。(5)获取栈顶元素返回栈顶元素,但不删除。2.2.2栈的应用栈在计算机科学中具有广泛的应用,以下列举几个常见应用:(1)表达式求值(2)字符串反转(3)函数调用(4)括号匹配(5)程序执行过程中的临时存储2.3队列的基本概念和实现2.3.1队列的基本概念队列(Queue)是一种特殊的线性表,其操作仅限于表的两端。一端被称为队头(Front),另一端被称为队尾(Rear)。队列的操作遵循“先进先出”(FirstInFirstOut,FIFO)的原则。2.3.2队列的实现队列可以通过数组或链表来实现。以下分别介绍这两种实现方式:(1)数组实现使用数组实现队列时,需要指定队列的最大容量。队列的初始化、入队和出队操作如下:初始化:设定队列的最大容量,将队头和队尾指针均设置为0。入队:判断队列是否已满,若未满,将元素插入队尾,并将队尾指针加1。出队:判断队列是否为空,若不为空,返回队头元素,并将队头指针加1。(2)链表实现使用链表实现队列时,链表的头部作为队头,链表的尾部作为队尾。队列的初始化、入队和出队操作如下:初始化:创建一个空链表。入队:在链表尾部插入一个新节点,存储元素。出队:删除链表头部的节点,并返回其存储的元素。2.4队列的操作与应用2.4.1队列的操作队列的基本操作包括入队、出队、判断队列空、判断队列满和获取队头元素。(1)入队(enqueue)将一个元素插入队尾。(2)出队(dequeue)删除队头元素,并返回。(3)判断队列空判断队列是否为空。(4)判断队列满判断队列是否已满(仅适用于数组实现)。(5)获取队头元素返回队头元素,但不删除。2.4.2队列的应用队列在计算机科学中同样具有广泛的应用,以下列举几个常见应用:(1)数据缓冲(2)消息队列(3)广度优先搜索(4)程序执行过程中的临时存储(5)线程同步第3章链表3.1链表的基本概念链表是一种常见的基础数据结构,它由一系列节点(Node)组成,每个节点包含数据域和指向下一个节点的指针域。链表与数组不同,数组在内存中是连续存储的,而链表则可以非连续存储,这使得链表在插入和删除操作时具有更高的效率。链表的主要特点如下:(1)动态大小:链表可以根据需要动态地增加或减少节点数量。(2)非连续存储:链表的节点可以分散地存储在内存中。(3)插入和删除操作高效:链表在插入和删除节点时,只需改变相应节点的指针即可,不需要像数组那样进行大量元素的移动。3.2单链表的实现单链表是最简单的链表形式,每个节点只包含一个指向下一节点的指针。以下是单链表的基本操作:(1)初始化:创建一个头节点,头节点的指针域为空,表示链表为空。(2)添加节点:将新节点插入到链表的末尾。(3)删除节点:删除链表中的指定节点。(4)查找节点:查找链表中是否存在指定值的节点。(5)遍历链表:遍历链表中的所有节点。以下为单链表的实现伪代码:classNode:def__init__(self,data):self.data=dataself.next=NoneclassSingleLinkedList:def__init__(self):self.head=Nonedefadd_node(self,data):new_node=Node(data)ifself.headisNone:self.head=new_nodeelse:current_node=self.headwhilecurrent_node.nextisnotNone:current_node=current_node.nextcurrent_node.next=new_nodedefdelete_node(self,data):current_node=self.headprev_node=Nonewhilecurrent_nodeisnotNone:ifcurrent_node.data==data:ifprev_nodeisNone:self.head=current_node.nextelse:prev_node.next=current_node.nextreturnTrueprev_node=current_nodecurrent_node=current_node.nextreturnFalsedeffind_node(self,data):current_node=self.headwhilecurrent_nodeisnotNone:ifcurrent_node.data==data:returnTruecurrent_node=current_node.nextreturnFalsedeftraverse(self):current_node=self.headwhilecurrent_nodeisnotNone:print(current_node.data)current_node=current_node.next3.3双向链表和循环链表双向链表是在单链表的基础上,每个节点增加一个指向前一个节点的指针。这使得双向链表在查找、插入和删除操作时更加灵活。以下是双向链表的基本操作:(1)初始化:创建一个头节点,头节点的指针域为空,表示链表为空。(2)添加节点:将新节点插入到链表的末尾,同时更新前一个节点的指针。(3)删除节点:删除链表中的指定节点,并更新相邻节点的指针。(4)查找节点:查找链表中是否存在指定值的节点。(5)遍历链表:遍历链表中的所有节点。循环链表是一种特殊的链表,链表中最后一个节点的指针指向第一个节点,形成一个环。循环链表有单向循环链表和双向循环链表之分。以下是循环链表的基本操作:(1)初始化:创建一个头节点,头节点的指针域指向自身,表示链表为空。(2)添加节点:将新节点插入到链表的末尾,并更新头节点的指针。(3)删除节点:删除链表中的指定节点,并更新相邻节点的指针。(4)查找节点:查找链表中是否存在指定值的节点。(5)遍历链表:遍历链表中的所有节点。第4章排序算法排序算法是计算机科学中重要的基础算法之一,它将一组数据按照特定的顺序进行排列。本章将介绍四种常用的排序算法:冒泡排序、选择排序、插入排序和快速排序。4.1冒泡排序冒泡排序是一种简单的排序算法,其基本思想是通过相邻元素的比较和交换,使较大(或较小)的元素逐渐从前往后(或从后往前)移动。具体步骤如下:(1)比较相邻的两个元素,如果它们的顺序不对就交换它们的位置。(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。(3)针对所有的元素重复以上的步骤,除了最后已经排序好的元素。(4)重复步骤1~3,直到排序完成。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。4.2选择排序选择排序是一种简单直观的排序算法,其基本思想是遍历数组,每次从未排序的序列中找到最小(或最大)的元素,将其放到排序序列的起始位置。具体步骤如下:(1)从数组的未排序部分选择最小(或最大)的元素。(2)将选出的最小(或最大)元素与未排序部分的第一个元素交换位置。(3)从未排序部分(不包括已交换位置的元素)继续选择最小(或最大)的元素,重复步骤2。(4)重复步骤3,直到整个数组排序完成。选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。4.3插入排序插入排序是一种简单的排序算法,其基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。具体步骤如下:(1)从第一个元素开始,该元素可以认为已经被排序。(2)取出下一个元素,在已经排序的元素序列中从后向前扫描。(3)如果该元素(已排序)大于新元素,将该元素移到下一位置。(4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。(5)将新元素插入到该位置后。(6)重复步骤2~5,直到所有元素排序完成。插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。4.4快速排序快速排序是一种高效的排序算法,采用分而治之的策略,将大问题分解为小问题来解决。其基本思想是选择一个基准元素,将数组分为两个子数组,使得左边子数组的元素都小于等于基准元素,右边子数组的元素都大于等于基准元素,然后递归地对左右两个子数组进行快速排序。具体步骤如下:(1)从数组中选择一个元素作为基准元素。(2)将数组分为两个子数组,一个包含小于等于基准元素的元素,另一个包含大于等于基准元素的元素。(3)递归地对两个子数组进行快速排序。(4)将已排序的两个子数组合并,得到最终排序完成的数组。快速排序的平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2),空间复杂度为O(logn)。第5章查找算法5.1顺序查找5.1.1概述顺序查找是一种基本的查找算法,适用于线性表的结构。其基本思想是从数据结构的一端开始,逐个检查每个元素,直到找到目标值或到达结构的另一端。顺序查找不需要数据结构具有特定的顺序,因此在数据量不大时,顺序查找是一种简单且有效的方法。5.1.2算法描述假设有一个线性表L,包含n个元素,目标值为key。顺序查找算法如下:(1)从线性表的一端开始遍历。(2)逐个比较当前元素与key。(3)如果当前元素等于key,返回当前元素的位置。(4)如果遍历结束仍未找到key,返回1表示查找失败。5.1.3时间复杂度顺序查找的时间复杂度为O(n),其中n为线性表中元素的个数。5.2二分查找5.2.1概述二分查找是一种在有序线性表中使用的查找算法。其基本思想是将目标值与线性表中间的元素进行比较,根据比较结果调整查找范围,逐步缩小查找区间,直到找到目标值或查找区间为空。5.2.2算法描述假设有一个有序线性表L,包含n个元素,目标值为key。二分查找算法如下:(1)初始化查找区间的上下界,low=0,high=n1。(2)当low≤high时,进行以下操作:a.计算中间位置mid=(lowhigh)/2。b.如果L[mid]等于key,返回mid。c.如果L[mid]小于key,调整查找区间为[low,mid1]。d.如果L[mid]大于key,调整查找区间为[mid1,high]。(3)如果查找区间为空,返回1表示查找失败。5.2.3时间复杂度二分查找的时间复杂度为O(logn),其中n为线性表中元素的个数。5.3哈希查找5.3.1概述哈希查找是一种基于哈希表的查找方法。哈希表通过哈希函数将关键码映射到表中的一个位置,以实现快速查找。哈希查找适用于大量数据的查找,具有较高的查找效率。5.3.2算法描述假设有一个哈希表H,包含n个元素,目标值为key。哈希查找算法如下:(1)根据哈希函数计算key的哈希值hashValue。(2)将hashValue映射到哈希表中的位置。(3)如果该位置对应的元素等于key,返回该位置。(4)如果该位置为空,表示查找失败,返回1。(5)如果该位置不为空但元素不等于key,进行冲突解决策略,如线性探测、二次探测或链地址法等。5.3.3时间复杂度哈希查找的时间复杂度取决于哈希表的设计和冲突解决策略。在理想情况下,哈希查找的时间复杂度为O(1)。但是在实际应用中,由于冲突的存在,时间复杂度可能会增加。第6章树与二叉树6.1树的基本概念树(Tree)是一种重要的非线性数据结构,它是由n(n≥0)个节点组成的有限集合。当n=0时,称为空树。在任意一个非空树中,有如下性质:(1)有且仅有一个特定的称为根(Root)的节点。(2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集,每一个集合本身又是一棵树,并称为根的子树。树的基本术语包括节点、根节点、子节点、父节点、兄弟节点、叶子节点、节点的层次、树的深度等。6.2二叉树的遍历二叉树(BinaryTree)是树的一种特殊形式,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的遍历是指按照某种顺序访问二叉树中的所有节点,并且每个节点仅被访问一次。二叉树的遍历方法分为深度优先遍历和广度优先遍历两大类。深度优先遍历包括前序遍历、中序遍历和后序遍历,具体如下:(1)前序遍历:先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。(2)中序遍历:先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树。(3)后序遍历:先递归地遍历左子树,然后递归地遍历右子树,最后访问根节点。广度优先遍历,也称为层序遍历,是指从根节点开始,按照从上到下、从左到右的顺序遍历二叉树中的节点。6.3线索二叉树线索二叉树(ThreadedBinaryTree)是一种对二叉树进行优化存储的方法,它通过在二叉树的节点中增加线索来表示节点的空指针域,从而减少存储空间的需求。线索二叉树分为前驱线索和后继线索两种。前驱线索表示节点的左指针指向其前驱节点,后继线索表示节点的右指针指向其后继节点。在线索二叉树中,可以利用线索快速找到节点的前驱和后继,提高遍历效率。6.4二叉树的存储结构二叉树的存储结构主要有两种:顺序存储结构和链式存储结构。(1)顺序存储结构:使用数组来存储二叉树,适用于完全二叉树或近似完全二叉树。在顺序存储结构中,节点之间的关系可以通过数组下标来表示。(2)链式存储结构:使用链表来存储二叉树,适用于一般二叉树。在链式存储结构中,每个节点包含三个域:数据域、左指针域和右指针域。左指针域指向节点的左子节点,右指针域指向节点的右子节点。当节点没有子节点时,对应的指针域为空。第7章图7.1图的基本概念图是一种复杂的数据结构,由顶点(Vertex)和边(Edge)组成。在图的研究中,顶点通常表示实体,边表示实体之间的关系。图广泛应用于计算机科学、网络科学、社会关系分析等多个领域。根据边的性质,图可以分为无向图、有向图、加权图和无权图等。无向图中的边没有方向,表示两个顶点之间的对称关系;有向图中的边有方向,表示顶点之间的单向关系;加权图中的边有权重,表示顶点之间的距离或代价;无权图中的边没有权重,表示顶点之间的等距离关系。7.2图的表示方法图的表示方法有多种,常用的有以下几种:(1)邻接矩阵(AdjacencyMatrix):使用一个二维数组表示图,数组的行和列分别对应图的顶点,数组中的元素表示顶点之间的连接关系。(2)邻接表(AdjacencyList):使用数组或链表表示图中的顶点,每个顶点对应一个链表,链表中的节点表示与该顶点相邻的顶点。(3)边集表(EdgeList):使用数组或链表表示图中的边,每个节点包含两个顶点表示边的起点和终点。(4)关联矩阵(IncidenceMatrix):使用一个二维数组表示图,数组的行表示顶点,列表示边,数组中的元素表示顶点与边的关系。7.3图的遍历图的遍历是指按照一定的顺序访问图中的所有顶点。图的遍历算法主要有两种:深度优先遍历(DFS)和广度优先遍历(BFS)。(1)深度优先遍历(DFS):从某个顶点开始,访问该顶点,然后递归地遍历它的邻接点。DFS适用于寻找图中所有顶点之间的连接关系。(2)广度优先遍历(BFS):从某个顶点开始,访问该顶点,然后遍历它的邻接点,再遍历邻接点的邻接点,以此类推。BFS适用于寻找图中顶点之间的最短路径。7.4最短路径算法最短路径算法用于求解图中两个顶点之间的最短路径。以下介绍两种常用的最短路径算法:(1)迪杰斯特拉算法(Dijkstra'sAlgorithm):适用于求解无向图中的最短路径问题。该算法从源点出发,逐步更新到达其他顶点的最短距离,直到找到终点。(2)弗洛伊德算法(Floyd'sAlgorithm):适用于求解有向图中的最短路径问题。该算法使用动态规划思想,通过逐步增加中间顶点,计算任意两个顶点之间的最短路径。第8章动态规划8.1动态规划的基本概念动态规划是一种求解优化问题的方法,其基本思想是将复杂问题分解为若干个子问题,并保存子问题的解,以避免重复计算。动态规划适用于具有重叠子问题和最优子结构特点的问题。本章将详细介绍动态规划的基本概念、方法和应用实例。8.1.1动态规划的定义动态规划是一种在数学、计算机科学和经济学等领域广泛应用的方法,用于求解具有最优解结构的决策问题。其核心思想是将问题分解为多个子问题,并利用这些子问题的解来构造原问题的解。8.1.2动态规划的特点(1)重叠子问题:动态规划问题通常包含多个相互重叠的子问题,这些子问题在求解过程中会多次出现。(2)最优子结构:动态规划问题的最优解包含其子问题的最优解。(3)存储子问题解:动态规划通过存储子问题的解,避免重复计算,提高求解效率。8.2动态规划的基本方法动态规划的基本方法包括两种:自顶向下的带记忆化搜索和自底向上的迭代求解。8.2.1自顶向下的带记忆化搜索自顶向下的带记忆化搜索是一种递归方法,它从原问题开始,逐步求解子问题,并在递归过程中存储已求解的子问题解,以避免重复计算。8.2.2自底向上的迭代求解自底向上的迭代求解是一种迭代方法,它从最简单的子问题开始,逐步求解更复杂的子问题,直到求解出原问题的解。这种方法通常使用循环实现。8.3动态规划的应用实例以下为几个典型的动态规划应用实例:8.3.1最长公共子序列最长公共子序列问题是指在两个序列中找到一个长度最长的公共子序列。动态规划方法可以高效地求解此问题。8.3.2背包问题背包问题是一类组合优化问题,要求在给定容量限制下,选择物品的组合,使得物品的总价值最大。动态规划方法可以求解各种背包问题,如01背包问题、完全背包问题等。8.3.3最小路径和最小路径和问题是指在加权图中找到一个从起点到终点的路径,使得路径上的权值和最小。动态规划方法可以求解此类问题,如迪杰斯特拉算法。8.3.4股票买卖问题股票买卖问题是指在给定股票价格序列的情况下,决定买卖时机,使得收益最大化。动态规划方法可以求解此类问题,如买卖股票的最佳时机问题。第9章贪心算法9.1贪心算法的基本概念贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望能够得到最终全局最优解的算法策略。贪心算法的核心思想是局部最优解,即每一步都做出当前看起来最优的选择,而不考虑未来可能的情况。贪心算法简单、高效,但并不总是能得到全局最优解。9.2贪心算法的设计方法贪心算法的设计通常遵循以下步骤:(1)确定问题的解结构:分析问题,找出解的结构,确定解的组成部分。(2)确定贪心选择策略:根据问题的特点,设计一个贪心选择策略,使得每一步都选择当前最优的解。(3)验证贪心选择的正确性:证明贪心选择策略能够得到全局最优解,或者给出贪心选择策略的适用条件。(4)设计算法实现:根据贪心选择策略,设计算法的具体实现步骤。(5)分析算法的时间复杂度:对算法的时间复杂度进行分析,评估算法的效率。9.3贪心算法的应用实例以下是一些常见的贪心算法应用实例:(1)零钱兑换问题:给定一组面额的硬币,求解最少硬币数以凑成给定金额的问题。贪心策略是每次选择面额最大的硬币。(2)活动选择问题:给定一组活动,每个活动都有开始时间和结束时间,求解最多能参加的活动数量问题。贪心策略是每次选择结束时间最早的活动。(3)背包问题:给定一组物品,每个物品有价值和重量,求解在背包容量限制下,能装入背包的物品的最大价值问

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论