当前位置: 首页 > article >正文

算法设计与分析-习题8.3

目录1.完成本节构造最优二叉查找树的例题中余下的计算。2.a.算法OptimalBST的时间效率为什么是立方级的?b.算法 OptimalBST 的空间效率为什么是平方级的?3.写一个线性时间算法的伪代码来从根表中生成最优二叉查找树。4.请设计一种在常量时间(每个求和式)内计算求和式 ​编辑 的算法我们会在构造最优二叉查找树的动态规划算法中用到这个算法。5.判断正误一棵最优二叉查找树的根总是包含查找概率最高的键。6.如果所有键的查找概率都相等将如何对一个包含n个键的集合构造最优二叉查找树?如果n2^k平均比较次数是多少?7.a.请证明对于一个包含n个有序键的集合所能构造的不同的二叉查找树b(n)的数量满足递推关系b.已知该递推关系的解是由卡塔兰数给出的。对于n12…5验证该断言。c.求b(n)的增长次数。对于构造最优二叉查找树的穷举查找算法而言这个问题的答案意味着什么?8.设计一个Θ(n²)的算法来求最优二叉查找树。9.把求解最优二叉查找树问题的算法推广到能够处理不成功查找的情况。10.写出采用记忆功能法求解最优二叉查找树问题的伪代码。算法功能可以只限于求出一次成功查找的最少键值比较次数。11.矩阵连乘 考虑如何使得在计算n个矩阵的乘积 A₁ A₂…An时总的乘法次数最小这些矩阵的维度分别为a.给出一个三个矩阵连乘的例子当分别用(A₁A₂)A₃和A₁(A₂A₃)计算时它们的乘法次数至少相差1000倍。b.有多少种不同的方法来计算n个矩阵的连乘乘积?c.设计一个求n个矩阵乘法最优次数的动态规划算法。1.完成本节构造最优二叉查找树的例题中余下的计算。初始表计算C(1,2):因此在键A和B可能构成的两颗二叉树中最优树的根的下标是2也就是B其平均比较长度为0.4又算C(2,3)算剩下的值最终就会得到这样一个表2.a.算法OptimalBST的时间效率为什么是立方级的?最优二叉查找树动态规划算法使用三重嵌套循环第一层循环遍历子序列的长度l1~n第二层循环遍历子序列的起点i1~n-l第三层循环遍历区间 [i,j] 内所有可能的根节点 ki~j每层最多执行n 次总操作次数为n×n×nn3循环内均为常数时间操作。因此时间效率为Θ(n³)立方级。b.算法 OptimalBST 的空间效率为什么是平方级的?算法需要维护三张二维表e[i][j]最优代价表w[i][j]概率和表root[i][j]根节点表因此效率是Θ(n^2)3.写一个线性时间算法的伪代码来从根表中生成最优二叉查找树。输入 root[i][j] 根表 n 关键字总数 输出 最优二叉查找树 函数 BuildOptimalBST(root, i, j): if i j1: return 空叶子结点 // 取出最优根 k root[i][j] 创建结点 k // 递归构建左、右子树线性时间 左孩子 BuildOptimalBST(root, i, k-1) 右孩子 BuildOptimalBST(root, k1, j) return 结点 k // 主调用 调用 BuildOptimalBST(root, 1, n)4.请设计一种在常量时间(每个求和式)内计算求和式的算法我们会在构造最优二叉查找树的动态规划算法中用到这个算法。预先计算一个前缀和数组sum_p让sum_p[j]表示p1​p2​⋯pj​那么任意区间和i ~ j可以直接用减法算出,这一步是纯减法O (1) 常量时间。// 第一步预处理O(n) 时间计算前缀和数组 输入p[1..n]节点概率数组 输出前缀和数组 sum_p[0..n] sum_p[0] 0 for k from 1 to n: sum_p[k] sum_p[k-1] p[k] // 第二步任意区间求和O(1) 常量时间 函数 GetSum(i, j): return sum_p[j] - sum_p[i-1]5.判断正误一棵最优二叉查找树的根总是包含查找概率最高的键。错误最优二叉查找树的目标是最小化平均查找代价它不只取决于根结点的概率还取决于整棵树的高度与所有结点的深度。查找概率最高的键不一定是最优根因为把概率最高的键放在根可能会让左右子树非常不平衡导致其他很多结点深度变大总代价反而更高。最优二叉查找树的根是使左子树代价 右子树代价 整棵树权重和最小的那个结点不一定是概率最高的结点。6.如果所有键的查找概率都相等将如何对一个包含n个键的集合构造最优二叉查找树?如果n2^k平均比较次数是多少?此时就是完全平衡二叉查找树满二叉查找树构造方法将键按有序排列每次选取中间位置的键作为根递归对左半部分构造左子树右半部分构造右子树n2^k时比较次数约为k-1具体公式为7.a.请证明对于一个包含n个有序键的集合所能构造的不同的二叉查找树b(n)的数量满足递推关系当n0时,设 n 个有序键为 1,2,…,n。任取第k1个键作为根左子树包含前k个键有b(k)种二叉查找树。右子树包含后n−1−k个键有b(n−1−k)种二叉查找树。根可以是任意位置对所有可能的根求和空树只有 1 种故b(0)1。证毕b.已知该递推关系的解是由卡塔兰数给出的。对于n12…5验证该断言。卡特兰数公式C1​1C2​2C3​5C4​14C5​42用递推式算 b (n)b(0) 1b(1) b(0)b(0) 1b(2) b(0)b(1)b(1)b(0) 112b(3) b(0)b(2)b(1)b(1)b(2)b(0) 2125b(4) 14b(5) 42完全对应卡特兰数断言成立。c.求b(n)的增长次数。对于构造最优二叉查找树的穷举查找算法而言这个问题的答案意味着什么?约为Θ(4^n),说明穷举法完全不可行必须用动态规划8.设计一个Θ(n²)的算法来求最优二叉查找树。输入p[1..n]键的概率, n 输出最优代价 e[1][n]根表 root[1][n] 初始化 e[i][i]p[i], root[i][i]i, w[i][i]p[i] 对所有 ie[i][i-1]0, w[i][i-1]0 for l from 2 to n: // 子树长度 l2~n for i from 1 to n-l1: j i l - 1 e[i][j] ∞ w[i][j] w[i][j-1] p[j] // Knuth 优化k 只在这个区间遍历 for k from root[i][j-1] to root[i1][j]: current e[i][k-1] e[k1][j] if current e[i][j]: e[i][j] current root[i][j] k e[i][j] e[i][j] w[i][j] return e[1][n], root9.把求解最优二叉查找树问题的算法推广到能够处理不成功查找的情况。现在要加入不成功查找查不在树里的值对应虚拟叶子节点。成功查找概率p1​,p2​,...,pn​不成功查找概率q0​,q1​,...,qn​对于q对应的不存在的元素q₀比 k₁ 小q₁在 k₁~k₂ 之间…qₙ比 kₙ 大算法 OptimalBST_Full(P[1..n], Q[0..n]) // 能处理【成功查找 不成功查找】的最优二叉查找树 // 输入 // P[1..n] 成功查找概率 // Q[0..n] 不成功查找概率 // 输出最优平均代价 C[1,n]根表 R for i ← 1 to n1 do C[i, i-1] ← Q[i-1] // 改动1空树代价 Q[i-1] for i ← 1 to n do C[i, i] ← P[i] Q[i-1] Q[i] // 改动2 R[i, i] ← i for d ← 1 to n-1 do // d子树长度-1 for i ← 1 to n-d do j ← id minval ← ∞ for k ← i to j do if C[i, k-1] C[k1, j] minval minval ← C[i, k-1] C[k1, j] kmin ← k R[i, j] ← kmin // 改动3sum 必须包含 P[i..j] Q[i-1] Q[j] sum ← Q[i-1] for s ← i to j do sum ← sum P[s] sum ← sum Q[j] C[i, j] ← minval sum return C[1, n], R10.写出采用记忆功能法求解最优二叉查找树问题的伪代码。算法功能可以只限于求出一次成功查找的最少键值比较次数。算法 MemoizedOptimalBST(P[1..n]) // 记忆功能法求最优二叉查找树仅成功查找 // 输入n个键的查找概率数组 P[1..n] // 输出最优平均比较次数 C[1,n] // 第一步创建备忘录 C全部初始化为 -1表示未计算 创建二维数组 C[1..n1][0..n] for i ← 1 to n1 do for j ← 0 to n do C[i][j] ← -1 // 第二步调用递归函数 return Lookup_C(1, n) // 递归查找函数核心记忆功能 函数 Lookup_C(i, j) if C[i][j] ≠ -1 then // 已经算过直接返回记忆功能 return C[i][j] if i j then // 空树 C[i][j] ← 0 else if i j then // 单个节点 C[i][j] ← P[i] else minval ← ∞ // 枚举所有可能的根 k for k ← i to j do cost ← Lookup_C(i, k-1) Lookup_C(k1, j) if cost minval then minval ← cost // 计算 P[i] 到 P[j] 的和 sum ← 0 for s ← i to j do sum ← sum P[s] C[i][j] ← minval sum return C[i][j]11.矩阵连乘 考虑如何使得在计算n个矩阵的乘积 A₁ A₂…An时总的乘法次数最小这些矩阵的维度分别为假设所有两个矩阵的中间乘积都使用蛮力算法(基于定义)计算。a.给出一个三个矩阵连乘的例子当分别用(A₁A₂)A₃和A₁(A₂A₃)计算时它们的乘法次数至少相差1000倍。设三个矩阵维度A₁: 1 × 1000A₂: 1000 × 1A₃: 1 × 1000① 计算 (A₁A₂) A₃A₁×A₂1×1000×1 1000 次结果是 1×1 矩阵再 × A₃1×1×1000 1000 次总计2000 次② 计算 A₁(A₂A₃)A₂×A₃1000×1×1000 1,000,000 次结果是 1000×1000 矩阵再 × A₁1×1000×1000 1,000,000 次总计2,000,000 次2,000,000 ÷ 2000 1000 倍b.有多少种不同的方法来计算n个矩阵的连乘乘积?第 n-1 个卡特兰数,增长为指数级。c.设计一个求n个矩阵乘法最优次数的动态规划算法。m[i][j] 矩阵 Aᵢ 到 Aⱼ 连乘的最小乘法次数s[i][j] 最优分割位置 k递推m[i][j] min( m[i][k] m[k1][j] d[i-1]d[k]d[j] )算法 MatrixChain(d[0..n]) // 输入矩阵维度数组 d[0..n]A_i 维度 d[i-1]×d[i] // 输出最小乘法次数 m[1][n]最优分割表 s 创建 m[1..n][1..n]s[1..n][1..n] for i ← 1 to n do m[i][i] ← 0 for l ← 2 to n do // l 是矩阵链长度 for i ← 1 to n-l1 do j ← il-1 m[i][j] ← ∞ for k ← i to j-1 do cost m[i][k] m[k1][j] d[i-1]*d[k]*d[j] if cost m[i][j] then m[i][j] ← cost s[i][j] ← k return m[1][n], s

相关文章:

算法设计与分析-习题8.3

目录 1.完成本节构造最优二叉查找树的例题中余下的计算。 2. a.算法OptimalBST的时间效率为什么是立方级的? b.算法 OptimalBST 的空间效率为什么是平方级的? 3.写一个线性时间算法的伪代码,来从根表中生成最优二叉查找树。 4.请设计一种在常量时间(每个求和…...

把数据交给松鼠,把安全留给自己(二):异地同步——把第二份数据放在灾害够不到的地方

2021年郑州暴雨,某科技公司办公室进水,服务器和放在同一房间的备份硬盘一起泡水,十年积累的研发数据全部损毁。 这不是孤例,而是无数中小企业灾备盲区的真实写照。 火灾、水灾、盗窃、雷击……这些“小概率”事件,一旦…...

【RaddbitMQ 概述】消息中间件核心概念

文章目录1. 前言2. 什么是 MQ2.1 同步通信2.2 异步通信3. MQ 的作用3.1 异步解耦3.2 流量削峰3.3 消息分发3.4 延迟通知4. 为什么选择 RabbitMQ4.1 Kafka4.2 RocketMQ4.3 RabbitMQ5. RabbitMQ介绍1. 前言 Rabbit,兔子的意思。 互联网行业很多公司,都喜…...

前端构建部署优化

前端构建部署优化:提升效率的关键策略 在当今快节奏的互联网开发中,前端构建和部署的效率直接影响产品的迭代速度和用户体验。随着项目规模扩大,构建时间变长、资源加载缓慢等问题逐渐凸显。如何通过优化手段提升构建部署效率,成…...

手把手教你部署Fun-ASR语音识别:Web界面操作,小白也能快速上手

手把手教你部署Fun-ASR语音识别:Web界面操作,小白也能快速上手 1. 引言 1.1 学习目标 今天咱们来聊聊一个特别实用的工具——Fun-ASR语音识别模型。你可能听说过语音识别,但总觉得这东西离自己很远,要么需要复杂的编程&#xf…...

LiuJuan20260223Zimage效果可视化:生成图分辨率、细节还原度、风格一致性实测报告

LiuJuan20260223Zimage效果可视化:生成图分辨率、细节还原度、风格一致性实测报告 1. 引言:当AI画笔遇见特定风格 你有没有想过,让AI帮你生成特定人物的图片,而且每次生成的效果都高度一致?这听起来像是为设计师或内…...

MySQL Explain 执行计划性能优化

MySQL Explain执行计划性能优化实战指南 在数据库性能优化中,MySQL的Explain执行计划分析是定位SQL性能瓶颈的核心工具。通过解析Explain输出的关键字段,开发者可以快速发现索引失效、全表扫描等问题,从而针对性优化查询效率。本文将深入剖析…...

程序员常见的职业病与预防

程序员职业病与科学预防指南 在数字化浪潮中,程序员成为推动技术进步的核心力量,但长期伏案、高强度用脑的工作模式也带来了独特的健康隐患。从颈椎劳损到用眼过度,这些"职业病"不仅影响工作效率,更可能造成不可逆的身…...

Stable Diffusion v1.5 在内容创作中的应用:快速生成文章插图与创意配图

Stable Diffusion v1.5 在内容创作中的应用:快速生成文章插图与创意配图 如果你是一名内容创作者,无论是写公众号、做视频、发小红书还是维护技术博客,你一定遇到过这样的烦恼:文章写好了,视频脚本完成了,…...

PROJECT MOGFACE跨平台文档生成:替代Typora的智能Markdown写作体验

PROJECT MOGFACE跨平台文档生成:替代Typora的智能Markdown写作体验 如果你和我一样,是个重度Markdown用户,每天都要和文档打交道,那你肯定对Typora不陌生。它简洁、实时预览,一度是很多人的写作首选。但不知道你有没有…...

圣女司幼幽-造相Z-Turbo保姆级教程:cat日志定位问题+Gradio端口映射调试

圣女司幼幽-造相Z-Turbo保姆级教程:cat日志定位问题Gradio端口映射调试 1. 快速了解圣女司幼幽-造相Z-Turbo 圣女司幼幽-造相Z-Turbo是一个专门生成《牧神记》中圣女司幼幽角色图片的AI模型。这个模型基于Z-Image-Turbo的LoRA版本训练而成,能够根据文字…...

GLM-4v-9b多场景落地:教培机构用4090实现课件截图→知识点打标+习题生成

GLM-4v-9b多场景落地:教培机构用4090实现课件截图→知识点打标习题生成 1. 引言:当AI老师走进课堂 想象一下这个场景:一位数学老师刚上完一节关于“二次函数”的课,他手头有几十张课件截图。过去,他需要花一两个小时…...

数据库运维最佳实践

数据库运维最佳实践:保障数据安全与高效运行 在数字化时代,数据库作为企业核心数据的存储和管理平台,其稳定性和安全性直接影响业务连续性。高效的数据库运维不仅能提升系统性能,还能降低故障风险。本文将介绍数据库运维中的关键…...

从零搭建ComfyUI:硬件选型、环境部署与工作流优化实战

1. ComfyUI入门:为什么选择节点式工作流? 第一次打开ComfyUI时,那种密密麻麻的节点连线界面确实容易让人发懵——这和我熟悉的WebUI差别太大了!但用惯之后才发现,这种看似复杂的设计才是真正的生产力工具。就像从Windo…...

Qwen2-VL-2B-Instruct压力测试与性能基准报告

Qwen2-VL-2B-Instruct压力测试与性能基准报告 最近在星图GPU平台上部署了Qwen2-VL-2B-Instruct模型,准备用它来处理一些图文对话任务。部署过程挺顺利,但心里一直有个疑问:这个服务到底能扛住多大的压力?如果同时有很多用户上传图…...

【HBuilderX】快速解决SCSS/Sass预编译错误:插件安装与配置全指南

1. 遇到SCSS/Sass预编译错误怎么办? 第一次在HBuilderX里看到"预编译器错误:代码使用了scss/sass语言,但未安装相应的编译器插件"这个提示时,我也是一头雾水。明明代码在别的编辑器里运行得好好的,怎么到这里…...

一人能顶一支团队?阿里发布全球首个企业级Agent平台“悟空”

3月17日,阿里巴巴发布全球首个企业级AI原生工作平台——“悟空”,让每个团队、每家公司,都能拥有一支24h工作的“龙虾军团”。悟空是一款独立应用,即日起开启邀测,也将直接内置到超2000万企业组织的钉钉之中。拥有8亿用…...

TEB参数优化实战:精准控制机器人半径与运动方向

1. TEB参数优化入门:为什么需要控制机器人半径? 刚接触TEB局部路径规划的朋友可能会疑惑:为什么非要精确控制机器人半径?这得从实际场景说起。想象一下仓储物流机器人在货架间穿行的场景——两侧货架间距可能只有1米左右&#xff…...

Stable Yogi Leather-Dress-Collection 生成速度优化实战:从分钟级到秒级的响应提升

Stable Yogi Leather-Dress-Collection 生成速度优化实战:从分钟级到秒级的响应提升 你是不是也遇到过这种情况?想用AI模型快速生成几张皮革连衣裙的设计图,结果输入描述后,等了快一分钟才出一张图。在创意构思、方案比对的场景下…...

YOLOE镜像使用全解析:文本、视觉、无提示三种模式怎么选

YOLOE镜像使用全解析:文本、视觉、无提示三种模式怎么选 1. YOLOE镜像核心能力概述 YOLOE(You Only Look at Everything)是新一代开放词汇目标检测与分割模型,其官方镜像集成了完整的推理和训练环境。相比传统封闭词汇检测模型&…...

HY-Motion 1.0新手避坑指南:环境配置与Prompt输入全解析

HY-Motion 1.0新手避坑指南:环境配置与Prompt输入全解析 1. 从零开始:环境配置详解 1.1 硬件要求与选择建议 HY-Motion 1.0作为十亿级参数的大模型,对硬件有一定要求。根据官方文档,标准版模型至少需要26GB显存,这意…...

Ostrakon-VL-8B对比YOLOv8:在目标描述与关系推理上的优势分析

Ostrakon-VL-8B对比YOLOv8:在目标描述与关系推理上的优势分析 最近在测试一些视觉模型时,我发现了一个挺有意思的现象。当我把同一张图片分别丢给一个经典的目标检测模型和一个新兴的视觉语言模型时,它们给出的“答案”截然不同。这让我开始…...

Java集成科大讯飞离线语音合成SDK实战指南——从环境搭建到音频生成

1. 环境准备:从零搭建开发环境 第一次接触科大讯飞离线语音合成SDK时,我花了整整两天时间才把环境搭好。现在回想起来,其实只要抓住几个关键点就能少走弯路。首先需要准备的是Java开发环境,推荐使用JDK 8或11版本,这两…...

高性能计算负载均衡

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…...

如何安全地存储用户的密码?(哈希与加盐)

如何安全地存储用户的密码?哈希与加盐的奥秘 在数字化时代,密码是保护用户隐私的第一道防线。许多数据泄露事件暴露了一个残酷的现实:明文存储密码如同将钥匙挂在门上。如何安全地存储密码?答案在于哈希(Hashing&…...

25大数据 2-2 字符串切片

字符串 1.字符串创建:用单引号‘或双引号“来创建,单双引号使用完全相同 2.字符串拼接 3.字符串重复* 4.字符串索引: 正序输出:从左往右以0开始 逆序输出:从右往左以-1开始 5.字符串切片: 变量名[头下标:尾…...

腾讯开源翻译模型体验:Hunyuan-MT-7B网页一键推理,效果惊艳

腾讯开源翻译模型体验:Hunyuan-MT-7B网页一键推理,效果惊艳 1. 模型介绍与技术亮点 1.1 多语言翻译新标杆 Hunyuan-MT-7B是腾讯开源的70亿参数多语言翻译大模型,在WMT25国际翻译比赛中斩获30个语种第一名的优异成绩。这个模型最令人惊艳的…...

Phi-3-mini-128k-instruct实战:使用Qt开发跨平台AI桌面应用

Phi-3-mini-128k-instruct实战:使用Qt开发跨平台AI桌面应用 最近在捣鼓一些本地AI应用,发现很多开发者朋友对如何把大模型塞进自己的桌面程序里很感兴趣。特别是用C和Qt的,总觉得这块门槛有点高。其实没那么复杂,我今天就用微软开…...

SpringBoot与Camunda实战:BPMN流程设计中的监听器机制深度解析

1. 监听器机制在BPMN流程中的核心价值 当你第一次接触Camunda流程引擎时,可能会被各种监听器类型绕晕。但我要告诉你,监听器就像是流程节点的"智能管家",它能帮你实现90%的动态流程控制需求。我在金融风控系统项目中,就…...

MTK DRM显示框架下的多屏兼容实战:从LK到Kernel的完整链路解析

1. MTK DRM显示框架与多屏兼容概述 在嵌入式设备开发中,显示系统的兼容性一直是工程师面临的核心挑战之一。MTK平台采用的DRM(Direct Rendering Manager)显示框架,为多屏幕适配提供了标准化的解决方案。这套框架从Bootloader阶段&…...