算法设计与分析基础 第八章谜题

article/2025/10/28 17:46:24

习题8.1

6.切割木棍问题 为下列问题设计一个动态规划算法。已知小木棍的销售价格pi和长度i相关,i=1,2,…,n,如何把长度为n的木棍切割为若干根长度为整数的小木棍,使得所获得的总销售价格最大?该算法的时间效率和空间效率各是多少?

解答:令长度为n的木棍能获得的最大价格为profit[n],递推公式为:profit[n] = max(pi[i] + profit[length - seg[i]]), 其中i = 1,2,3,...n;边界条件profit[0]=0。

#include <iostream>    
using namespace std; //自底向上,两个循环,不用递归;   
int main()  
{  int n = 10;  int price[11] = { 0, 1, 7, 8, 9, 10, 17, 17, 20, 23, 24 };  int *r = new int[n + 1];  for (int i = 0; i <= n; ++i)  r[i] = 0;  //初始化  for (int i = 1; i <= n; ++i)//规模长度为i    {  int q = INT_MIN;  for (int j = 1; j <= i; ++j)//计算规模为i的最大收益    {  if (q < (price[j] + r[i - j]))//因为i>i-j,所以当计算r[i]时,r[i-j]已经解决,可以直接用    q = (price[j] + r[i - j]);  //迭代q;  }  r[i] = q;  //找出i这个位置的最优解;  }  cout << r[n];  //最后是n这个位置,就是n米长的木头的最大价值。  delete r;  return 0;  
}  

此算法的时间效率是O(n^2),空间效率是O (N)

 

7.最短路径数量 国际象棋中的车可以水平或竖直移到棋盘中同行或同列的任何一格。将车从棋盘的一角移到另一对角,有多少条最短路径?路径的长度由车所经过的方格数(包括第一格和最后一格)来度量。使用下列方法求解该问题。

a.动态规划算法

解答: 国际象棋的棋盘为8*8,假设从左下角移动到右上角,P(i,j)表示从起始位置移动到第i行第j列的最短路径数,递推公式为

 

计算结果如下图所示:

b.基本排列组合

解答:对于n*n的棋盘,从(1,1)移动到(n,n)的最短路径总数应该为C(2(n-1), n-1), 因为必走2(n-1)步,其中n-1步向左,剩下为向右。C(14,7)=3432

 

11.最大子方阵 对一个m×n布尔矩阵B,找出其元素均为0的最大子方阵。设计一个动态规划算法并给出时间效率。(该算法可能会用于在计算机屏幕中寻找最大空白区域或者是选择建筑地点。)

解答:对每个元素,把以其为右下角,元素全为0的正方形的最长边长记录下来。如果以元素B(i, j)为右下角的正方形边长为b,那么以B(i-1, j)为右下角的正方形边长肯定为b-1,且以B(i, j-1)为右下角的正方形边长为b-1,否则正方形的边不完整。

public int maximalSquare(char[][] a) {  if(a.length == 0) return 0;  int m = a.length, n = a[0].length, result = 0;  int[][] b = new int[m+1][n+1];  for (int i = 1 ; i <= m; i++) {  for (int j = 1; j <= n; j++) {  if(a[i-1][j-1] == '0') {  b[i][j] = Math.min(Math.min(b[i][j-1] , b[i-1][j-1]), b[i-1][j]) + 1;  result = Math.max(b[i][j], result); // update result  }  }  }  return result*result;  
}  

 

习题8.2

5.假设n种物品中每种物品的数量不限,为该背包问题设计一个动态规划算法并分析该算法的时间效率。

解答:完全背包问题与01背包问题的区别在于每一件物品的数量都有无限个,而01背包每件物品数量只有一个。问题解法其实和01背包问题一样,只是初始化的值和递推公式需要稍微变化一下。初始化时,当只考虑一件物品a时,f[1][j] = j/weight[a]。递推公式计算时,f[i][j] = max{f[i-1][j], (f[i][j-weight[i]]+value[i])},注意这里当考虑放入一个物品 i 时应当考虑还可能继续放入 i,因此这里是f[i][j-weight[i]]+value[i], 而不是f[i-1][y-weight[i]]+value[i]。算法的时间效率θ(nW)

 

 

习题8.3

11.矩阵相乘 考虑如何使得在计算n个矩阵的乘积  时,总的乘法次数最小,这些矩阵的维度分别为  。假设所有两个矩阵的中间乘积都使用蛮力算法(基于定义)计算。

a.给出一个三个矩阵连乘的例子,当分别用  和 计算时,它们的乘法次数至少相差1000倍。

    解答:矩阵维数A1为1000*1,A2为1*1000,A3为1000*1

b.有多少种不同的算法来计算n个矩阵的连乘乘积?

解答:算法数递推公式为. 并且m(1)=1.

c.设计一个求n个矩阵乘法最优次数的动态规划算法。

解答:设矩阵连乘积AiAi+1…Aj简记为A[i:j],设计算A[i:j],1≤i≤j≤n,所需要的最少数乘次数m[i,j],则原问题的最优值为m[1,n]。当i=j时,A[i:j]=Ai,因此,m[i][i]=0,i=1,2,…,n。当i<j时,若A[i:j]的最优次序在Ak和Ak+1之间断开,i<=k<j,则:m[i][j]=m[i][k]+m[k+1][j]+pi-1*pk*pj。由于在计算是并不知道断开点k的位置,所以k还未定。不过k的位置只有j-i个可能。因此,k是这j-i个位置使计算量达到最小的那个位置。

 综上,有递推关系如下:

https://img-my.csdn.net/uploads/201301/13/1358061539_5348.jpg

 

习题8.4

11.挑棍游戏 也叫“挑游戏棒”或“撒棒”。该游戏有若干塑料或木制的游戏棒散倒在桌子上,玩家要试着把他们一根接一根取走而不要移动其他游戏棒。在这里,我们只考虑一对对游戏棒之间是不是通过一系列相互搭着的游戏棒相连接。给定n(n>1)根游戏棒(假设它们散倒在一张很大的画图纸上)的端点列表,请找出左右相连的游戏棒。请注意,搭在一起的算相连,但能通过其他相连游戏棒间相连的也应该算相连。

解答:该任务初看跟Warshall算法没有联系,但仔细分析后发现,只要将游戏棒缩小成一个点,如果两根游戏棒的端点值一样,则可以看成这两个点之间有边相连;这样散倒在桌子上的游戏棒就变成了一个无向图,找出所有相连游戏棒的任务就变成了求出该无向图的传递闭包。


http://chatgpt.dhexx.cn/article/yLcWvdAT.shtml

相关文章

算法设计与分析基础(三)

算法设计与分析基础(三) 练习题 根据下列函数的增长次数按照从低到高的顺序对他们进行排序。 解答&#xff1a; 解答&#xff1a; 即&#xff0c;该多项式的始终值为ak*n^k,则结论成立。 考虑下面的算法&#xff1a; 算法Mystery(m) //输入:非负整数n S←0 for i←1 to …

算法设计与分析基础

To All Of You&#xff1a; 一个人在接受科技教育时能得到的最珍贵的收获是能够终身受用的通用智能工具。 在讨论算法的书籍中&#xff0c;一般会采用两种方案中的一种&#xff1a; 1.第一种方案是按照问题的类型对算法进行分类。这类教材安排了不同的章节分别讨论排序&…

第一章 算法设计与分析基础知识

系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 …… [TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 参考教材 《算法设计与分析&#xff08;第2版&#xff09;》是由屈婉玲、刘田、张立昂、王…

算法设计与分析——算法分析基础

算法分析主要是时间复杂度和空间复杂度的两个方面的分析 此处带着问题小预告一把&#xff1a; 时间复杂度&#xff1f;空间复杂度&#xff1f; 大O、大和大分别表示什么&#xff1f; 如何得到递归方程&#xff1f;如何求解递归方程呢&#xff1f; 带着问题来探索吧~ 目录…

算法设计与分析(1)——基础知识

写完 Java 的我又开始对 算法设计与分析 下手了(✿◡‿◡) 内容主要是以 北京大学 屈婉玲老师的 MOOC 视频来写的&#xff0c;视频共是十周的内容&#xff0c;我决定用 五 篇博客完成。 温馨提示&#xff1a;这个课程不仅适用于 算法设计与分析 的学习&#xff0c;也非常适用…

算法设计与分析——算法基础初步了解

算法的概念 算法:一个有计算步骤构成的序列&#xff0c;可以将一组输入值转换成相应的输出值。或可以用例解决一个明确的问题。 问题&#xff1a;输入及相应输出的描述&#xff1a; 算法的特点&#xff1a;确定性、可行性、输入和输出及有穷性。 正确的算法&#xff1b;停机并…

算法设计与分析基础知识

一、算法设计基础 算法是&#xff08;algorithm&#xff09;是对特定问题求解步骤的一种描述&#xff0c;是指令的有限序列。 算法的五个特性&#xff1a; 输入&#xff1a;一个算法可以有零个或多个输入。 输出&#xff1a;一个算法有一个输出或多个输出。 有穷性&#xff08;…

为你的股票绘制趋势图

手里有一点点公司的股票&#xff0c; 拿不准在什么时机抛售&#xff0c; 程序员也没时间天天盯着看&#xff0c;不如动手写个小程序&#xff0c; 把股票趋势每天早上发到邮箱里&#xff0c;用 python 的 pandas, matplotlib 写起来很容易&#xff0c; 几十行代码搞定。 准备环…

用PYTHON画图 看股票/数字货币的趋势分析 带你直观理解指标 K线图

用PYTHON画图 看股票/数字货币的趋势分析 带你直观理解指标 本文章将用PYTHON 画图 以比特币&#xff08;BTC&#xff09;为例 进行画图分析 &#xff08;小白向&#xff09; Pycharm平台编写 所用到的python库 import requests from lxml import etree import math import …

Plotly中绘制三种经典的股票交易图表(含视频讲解)

作者&#xff1a;Lemon 来源&#xff1a;Python数据之道 Plotly中绘制三种经典的 股票交易图表&#xff08;含视频讲解&#xff09; 大家好&#xff0c;我是 Lemon 。 背景 前一段时间&#xff0c; Lemon 发了一期视频&#xff0c;分享了 Plotly 和 Dash 在投资领域的应用案例。…

如何在股票软件画波浪?波浪原理?初级应用画线

如何在股票软件画波浪&#xff1f;波浪原理?初级应用画线 听语音 浏览&#xff1a;1|更新&#xff1a;2018-03-13 10:07|标签&#xff1a;股票 1 2 3 4 5 6 7 分步阅读 波浪理论最主要特征就是它的通用性&#xff0c;在股市中是一个十分重要的技术研究方向&#xff0c;一旦成…

使用Python生成股票K线图

可视化股票数据&#xff0c;这里只做简单的处理&#xff0c;只显示k线图。选取的是海通证券&#xff08;600837&#xff09;2020年1月1日之后150个交易日的数据。这里代码不多&#xff0c;没有封装成方法&#xff0c;代码如下。数据是提前获取的&#xff0c;获取方法见&#xf…

Python获取股票数据并绘制相应K线图,看这个就够了!

Python对股票的K线可视化 前言说明注意 数据获取Tushare获取股票数据获取医疗器械板块数据&#xff08;代码部分&#xff09;获取股票数据&#xff08;代码部分&#xff09; 数据预处理变量中文化&#xff08;代码部分&#xff09; K线绘制代码部分结果展示 写在最后 前言 说明…

使用mpl_finance画股票K线图

使用mpl_finance画股票K线图 前言正文 前言 今天给大家介绍一下如何利用 python 中的 mpl_finance 模块画股票K线图。 该模块在 matplotlib 2.0之前是叫做 matplotlib.finance 但此之后是叫做 mpl_finance。 详细介绍请看https://matplotlib.org/api/finance_api.html 。具体用…

Python画图实战之画K线图【附带自动下载股票数据】

关于Python画图的基本知识可以先查看下面这篇文章Python画图&#xff08;直方图、多张子图、二维图形、三维图形以及图中图&#xff09;https://blog.csdn.net/weixin_41896770/article/details/119798960 对于股民来说&#xff0c;K线图是最常见的一种参考&#xff0c;使用Pyt…

一步一步教你写股票走势图——K线图二(图表联动)

目录 一步一步教你写股票走势图——分时图一&#xff08;概述&#xff09; 一步一步教你写股票走势图——分时图二&#xff08;自定义xy轴&#xff09; 一步一步教你写股票走势图——分时图三&#xff08;对齐图表、自定义柱状图高亮&#xff09; 一步一步教你写股票走势图…

如何对走势图进行画线分析

现货黄金投资入门与技巧&#xff0c;如何都绕不开这个问题&#xff0c;那就是画线分析。画线分析是技术分析一个重要的流派&#xff0c;也是我们分析市场必不可少的手段&#xff0c;掌握画线的方法&#xff0c;对我们掌握现货黄金投资入门与技巧有很大的帮助。 一、支撑线和压力…

使用Python绘制精美绝伦的股票行情K线图

PythonPyQt2.74 本文简单介绍了如何从Tushare获取某支股票的价格数据&#xff0c;并根据价格数据画出相应的日K线图。 # -*- coding: utf-8 -*-import sys import talib import numpy as np import pandas as pd import tushare as ts import datetime as dt import pyqtgraph …

缠论 公式 自动画线 画笔 中枢 买卖点 源代码

显示效果 跨级别区间套演示 板块演示 个股演示 期货演示 源码如下&#xff1a; {三角形中枢}时间:4;A:HHHV(H,时间*5) AND HHV(H,时间*5)>REF(HHV(H,时间*5),1);B:LLLV(L,时间*5) AND LLV(L,时间*5)<REF(LLV(L,时间*5),1);CC1:DRAWLINE(A,H,B,L,0);CC2:DRAWLINE(B,L,A,H…

利用 python numpy +matplotlib 绘制股票k线图

一、python numpy matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from matplotlib import pyplot as plt from matplotlib import animationfig plt.figure(figsize(8,6), dpi72,facecolor"white") axes plt.subplot(1…