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

算法设计与分析-习题4.3

目录1.在你的计算机上实现一个要求生成 25 个元素组成的集合的全部排列的算法是否现实?如果是生成该集合的所有子集呢?2.使用下面的方法生成{1234}的全部排列a.从底向上的最小变化算法。b. Johnson-Trotter算法。​编辑c.字典序算法。3. 把 LexicographicPermute算法应用到多重集{1,2,2,3}上。它是否能正确生成字典序的所有排列?4.请考虑下面这个生成排列算法的实现这个算法是由 B.希普(B. Heap)发明的([Hea63])。a.对于n2,3,4的情况手工跟踪该算法。b.证明 Heap算法的正确性。c. HeapPermute的时间效率如何?5.用本节介绍的两种算法分别对一个4元素的集合A(a₁,a₂,a₃,a₄)生成它的所有子集。6.有什么简单的小窍门可以使得基于位串的算法可以按照挤压序生成子集?7.有一个生成所有2ⁿ个长度为n的位串的递归算法为它编写伪代码。8.写一个生成2ⁿ个长度为n的位串的非递归算法它用数组来实现位串并且不使用二进制加法。9.a.生成4位的二进制反射格雷码。b.跟踪下面生成4位二进制反射格雷码的非递归算法。以全0的n位串开始。而对于 i1,2,…,2ⁿ⁻¹,则通过反转前一位串中的第b位来生成第i个位串在这里b是i的二进制表示中最低位1的位置。10.设计一个减治算法来生成n个元素的k个分量的所有组合也就是说一个给定的n元素集合的所有k元素子集。你设计的算法是最小变化算法吗?11.格雷码和汉诺塔a.为什么汉诺塔的经典递归算法产生的移动盘子动作可以用来生成二进制反射格雷码?b.如何利用二进制反射格雷码来解汉诺塔问题?12.展会彩灯 早些年在展会上可能会看到这样一种彩灯一个被连接到若干开关上的电灯泡只当所有开关都闭合的时候才会发光。每一个开关由一个按钮控制按下按钮就会切换开关状态但是开关的状态是无法知道的。目标就是点亮灯泡。设计一个点亮灯泡的算法使其在有n个开关时在最坏的情况下需要按动按钮的次数最少。1.在你的计算机上实现一个要求生成 25 个元素组成的集合的全部排列的算法是否现实?如果是生成该集合的所有子集呢?由于 25!≈1.5·10^25即使在超级计算机上生成这么多排列也需要不切实际的长时间。另一方面2^25≈3.3·10^7在每秒进行一亿次操作的计算机上生成大约需要 0.3 秒。2.使用下面的方法生成{1234}的全部排列a.从底向上的最小变化算法。b. Johnson-Trotter算法。c.字典序算法。3.把 LexicographicPermute算法应用到多重集{1,2,2,3}上。它是否能正确生成字典序的所有排列?1223,1232,1322,2123,2132,2213,2231,2312,2321,3122,3212,32214.请考虑下面这个生成排列算法的实现这个算法是由 B.希普(B. Heap)发明的([Hea63])。算法 HeapPermute(n) //实现生成排列的 Heap 算法 //输入一个正整数n和一个全局数组A[1..n] //输出 A中元素的全排列 if n1 write A else for i←1 to n do HeapPermute(n-1) if n is odd swap A[1] and A[n] else swap A[i] and A[n]a.对于n2,3,4的情况手工跟踪该算法。n2时HeapPermute(2) i1: HeapPermute(1) → 输出 [1,2] n 偶数 → swap A[1] ↔ A[2] → A[2,1] 循环结束 输出 1 2 2 1n3 时HeapPermute(3) i1: HeapPermute(2) → 输出 123, 213 n 奇数 → swap A[1] ↔ A[3] → A[3,1,2] i2: HeapPermute(2) → 输出 312, 132 n 奇数 → swap A[1] ↔ A[3] → A[2,1,3] i3: HeapPermute(2) → 输出 213, 123 n 奇数 → swap A[1] ↔ A[3] → A[3,1,2]b.证明 Heap算法的正确性。基例 n1直接输出数组唯一排列成立。归纳假设假设HeapPermute(k)能正确生成 k 个元素的全部 k! 个排列。归纳步骤 n k1循环执行 n 次每次调用HeapPermute(n-1)生成前 n-1 个元素的全部排列。n 偶数交换A[i] ↔ A[n]把第 n 个位置换上新元素。n 奇数交换A[1] ↔ A[n]固定轮换最后一位。每次调用都生成完整的 (n-1)! 个排列共 n 次 → 总排列数 n×(n-1)! n!。c. HeapPermute的时间效率如何?时间效率O (n!)5.用本节介绍的两种算法分别对一个4元素的集合A(a₁,a₂,a₃,a₄)生成它的所有子集。自底向上n0: { } n1: { }, {a₁} n2: { }, {a₁}, {a₂}, {a₁,a₂} n3: { }, {a₁}, {a₂}, {a₁,a₂}, {a₃}, {a₁,a₃}, {a₂,a₃}, {a₁,a₂,a₃} n4: 在上面所有子集后面依次添加 a₄二进制0000 → { } 0001 → {a₁} 0010 → {a₂} 0011 → {a₁,a₂} 0100 → {a₃} 0101 → {a₁,a₃} 0110 → {a₂,a₃} 0111 → {a₁,a₂,a₃} 1000 → {a₄} 1001 → {a₁,a₄} 1010 → {a₂,a₄} 1011 → {a₁,a₂,a₄} 1100 → {a₃,a₄} 1101 → {a₁,a₃,a₄} 1110 → {a₂,a₃,a₄} 1111 → {a₁,a₂,a₃,a₄}{ }, {a₁}, {a₂}, {a₁,a₂}, {a₃}, {a₁,a₃}, {a₂,a₃}, {a₁,a₂,a₃}, {a₄}, {a₁,a₄}, {a₂,a₄}, {a₁,a₂,a₄}, {a₃,a₄}, {a₁,a₃,a₄}, {a₂,a₃,a₄}, {a₁,a₂,a₃,a₄}6.有什么简单的小窍门可以使得基于位串的算法可以按照挤压序生成子集?把数字按照二进制格雷码Gray Code的顺序生成而不是普通的 0,1,2,3... 顺序7.有一个生成所有2ⁿ个长度为n的位串的递归算法为它编写伪代码。算法GenerateAllBits(n) 输入正整数 n 输出所有长度为 n 的二进制位串 // 辅助递归函数 过程 Backtrack(pos, current[]) if pos n 输出 current[] // 生成完成打印位串 return // 当前位置放 0 current[pos] 0 Backtrack(pos 1, current) // 当前位置放 1 current[pos] 1 Backtrack(pos 1, current) // 主算法 主函数 定义数组 current[1..n] Backtrack(1, current)8.写一个生成2ⁿ个长度为n的位串的非递归算法它用数组来实现位串并且不使用二进制加法。初始化全 0每次找最右边的 0 变为 1其右侧全部置 0循环直到生成全部 2ⁿ个串。不使用二进制加法。算法BitStringIterative(n) // 非递归生成所有长度为n的二进制位串 // 不使用二进制加法用数组实现 输入正整数 n 输出所有 2ⁿ 个长度为 n 的位串 A[1..n] ← {0} // 初始化全0数组 输出 A for i ← 1 to 2ⁿ − 1 do // 找最右边的0把它变成1 j ← n while j ≥ 1 and A[j] 1 do j ← j − 1 A[j] ← 1 // 最右0 → 1 // j 右边全部变回 0 for k ← j1 to n do A[k] ← 0 输出 A9.a.生成4位的二进制反射格雷码。0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000b.跟踪下面生成4位二进制反射格雷码的非递归算法。以全0的n位串开始。而对于 i1,2,…,2ⁿ⁻¹,则通过反转前一位串中的第b位来生成第i个位串在这里b是i的二进制表示中最低位1的位置。同a一样10.设计一个减治算法来生成n个元素的k个分量的所有组合也就是说一个给定的n元素集合的所有k元素子集。你设计的算法是最小变化算法吗?全局数组A[1..k] // 存放当前组合 主调用Choose(1, k) 过程 Choose(i, k) // 生成 {i, i1, ..., n} 中所有 k 元子集 // 结果存在 A 里按**降序**输出 if k 0 输出 A else for j i to n - k 1 do A[k] j // 把 j 放在第 k 位最后一位 Choose(j 1, k - 1)不是最小变化算法因为相邻组合可能变化多个元素不满足相邻仅变化一个元素的条件11.格雷码和汉诺塔a.为什么汉诺塔的经典递归算法产生的移动盘子动作可以用来生成二进制反射格雷码?因为汉诺塔每次只移动 1 个盘子而格雷码相邻两个数也正好只变 1 位它们的 “最小变化” 结构完全一样b.如何利用二进制反射格雷码来解汉诺塔问题?000 → 001 → 011 → 010 → 110 …… 第1位变 第2位变 第1位变 第3位变……对应的汉诺塔移动1号盘 → 移动2号盘 → 移动1号盘 → 移动3号盘……12.展会彩灯 早些年在展会上可能会看到这样一种彩灯一个被连接到若干开关上的电灯泡只当所有开关都闭合的时候才会发光。每一个开关由一个按钮控制按下按钮就会切换开关状态但是开关的状态是无法知道的。目标就是点亮灯泡。设计一个点亮灯泡的算法使其在有n个开关时在最坏的情况下需要按动按钮的次数最少。按照 n 位二进制反射格雷码的顺序依次切换每一步变化的那一位开关。此时递推式为最坏情况只需要按 2ⁿ − 1 次

相关文章:

算法设计与分析-习题4.3

目录 1.在你的计算机上实现一个要求生成 25 个元素组成的集合的全部排列的算法是否现实?如果是生成该集合的所有子集呢? 2.使用下面的方法生成{1,2,3,4}的全部排列: a.从底向上的最小变化算法。 b. Johnson-Trotter算法。 ​…...

一篇看懂:进程、服务、启动项、计划任务到底是什么?

很多刚接触电脑、运维、Windows / 服务器的朋友,都会被这四个词绕晕:进程、服务、启动项、计划任务。它们长得像、功能像、还经常一起出现,但职责完全不同。这篇用最通俗的话,帮你一次性分清。一、进程(Process&#x…...

sdut-程序设计基础Ⅰ-实验7-函数(函数题)

6-1 sdut-C语言实验-计算组合数分数 10作者 马新娟单位 山东理工大学计算组合数。C(n,m),表示从n个数中选择m个的组合数。 计算公式如下: 若:m0,C(n,m)1 否则, 若 n1,C(n,m)1 否则,若mn,C(n,m)1…...

为2026年营销活动找富士山素材,这五类站点的筛选顺序很重要

作为一名市场专员,上周我接到了一个有些紧急的任务:为公司一个重要的日式主题营销活动设计主视觉,并在当晚拿出第一版概念稿。核心元素是富士山,但要求风格现代、简约,避免使用那些随处可见的游客照或过时的插画。问题…...

在 Kata Containers 中编译支持 eBPF 的 Guest Kernel 并验证生效

此前在 8 月份因项目需求,我对 Kata 容器进行了调研,并在 CentOS 上部署了单机版 Kata 环境。当时受限于进度,仅完成基础环境搭建。近期我重新开始探索 eBPF 在 Kata 容器中的支持与适配情况,于是有了这篇文章。后续我还会输出 Ka…...

51单片机驱动共阴极数码管显示0~9

文章目录 概要 硬件设计 软件设计 编译下载 小结 概要 项目采用共阴极单支数码管作为显示器件,通过单片机I/O口输出段选信号控制数码管段亮灭,配合延时函数实现数字0~9每隔1秒自动加1,并循环往复显示的功能。 硬件设计 1. 核心器件 …...

模拟1688商品详情的Python API实现,返回符合风格的JSON数据

该文件包含两个模拟商品数据,结构完整覆盖以下核心字段:商品基础信息:商品ID、标题、价格(含原价与现价)、库存量商品描述:富文本描述内容视觉展示:多图链接列表(主图详情图&#xf…...

Google Banana pro 画卡通信息图

提示词:[System / Prompt]You are an illustration assistant specialized in creating hand-drawn cartoon-style infographics. Follow all rules below strictly and without deviation.🎨 STYLE RULES(风格规则)Use a pure ha…...

算力焦虑终结?揭秘GPU云服务器的民主化之路

从算力焦虑到算力民主:一份GPU云服务器的深度观察 在大模型参数规模朝着万亿单位迈进之时,于文生视频应用在短短几秒内所消耗的算力等同于传统应用数月用量之际,一个无法争议的事实呈现眼前:算力,特别是 GPU 算力&…...

Spring AI + RAG + 向量库 10 道模拟面试

文章目录1. 什么是 Spring AI?它解决什么问题?2. Spring AI 的核心组件有哪些?3. Spring AI 和 LangChain 的区别?4. 什么是 RAG?为什么要用 RAG?5. RAG 的完整流程是什么?6. 为什么要用向量数据…...

Obsidian笔记记录与Gitee云存储

Obsidian下载 首先下载ObsidianObsidian - 磨砺你的思维,下载完成后打开会弹出本地仓库创建的提示 每个仓库都是一个相对独立的空间,我们的笔记和插件都存放在里面,如核心插件的插入模板的模板文件夹和第三方插件都是各仓库独立,…...

Dev-C++中项目类型如何选择?

在Dev-C中选择项目类型时,主要根据开发需求来决定。以下是常见选项及其适用场景:1. 控制台程序(Console Application)用途:适用于命令行界面的程序(如算法练习、数据处理等)。特点:运…...

破解密码.

1.开启虚拟机,快速点击鼠标,用上下键选择第二个选项2.然后按E键3.按左右上下键,将光标移到”quiet"后边,4.输入“rd.break"5.按”ctrlx或F10“,进入该界面6.输入此代码后设置密码(不要设置和之前…...

Chrome DevTools在Agent编程工具上的安装

1.Cursor上安装vscode打开Agent Settings{"mcpServers": {"chrome-devtools": {"command": "npx","args": ["chrome-devtools-mcplatest"]}} }claude code和codex在CLI中# Claude Codeclaude mcp add chrome-devt…...

CMD和PowerShell在激活conda环境中遇到的问题

问题引入近日在部署一个agent项目中遇到了激活虚拟环境的问题,现在的IDE默认终端一般是powershell,用conda命令创建、删除环境没啥问题,但是就是激活进入不了。而平时我用conda命令一般用cmd终端(其实之前一直没注意cmd和powershe…...

HakcMyVM-Darkside

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.2.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2026-03-15 03:46 EDT Nmap scan report for darkside (192.168.2.19) Host is up (0.00023s latency). MAC Address: 08:00:27:3B:49:15 (PCS Systemt…...

基于C语言的轻量级在线商城服务端设计与实现

在当前以Java、Go和Python为主导的电商后端技术生态中,使用C语言构建Web服务似乎显得格格不入。然而,在资源受限环境或对性能有极致追求的场景下,C语言的价值不容忽视。它能够提供对内存和系统调用的精确控制,避免高级语言运行时带…...

欧姆龙CP1H与台达VFD - M变频器的MODBUS RTU通讯实战

欧姆龙CP1H的MODBUS RTU简易主站通讯,通过CP1W-CIF11板与台达VFD-M变频器进行。PLC程序进行轮询通讯,正常情况下只进行读操作,当修改频率或者操作启停命令时,才进行写操作,写操作完成后自动移除。 从而起到保护从站变频…...

从能跑到跑得快:一次大模型硬件加速的工程实践

从能跑到跑得快:一次大模型硬件加速的工程实践 写大模型应用时,很多团队最先遇到的问题不是“模型会不会答”,而是“模型为什么这么慢”。 一套模型在开发阶段能跑起来,和它能在线上稳定、低延迟、可并发地服务用户,是…...

【第二周】RAG与Agent实战13:通用提示词模板 (PromptTemplate)

在之前我们直接将字符串传给模型: model.invoke("帮我写一首诗")这种写法叫做 Zero-shot(零样本) 提示。但在实际应用中,我们需要动态地替换提示词中的内容(比如用户的名字、查询的问题、文档的片段&#xf…...

基于VirtualLab Fusion的复合光源仿真

摘要能够在一个系统中包含多个光源是许多应用的基础,如成像或照明。VirtualLabFusion提供了解决这类问题的高级选项。在本文档中,我们简要概述了如何设置复合光源,并给出了几个仿真示例。概览复合光源可以:包含任意数量的主光源。…...

快速清理手机QQ大量占用的存储空间

快速清理手机QQ大量占用的存储空间 众所周知,手机QQ随着使用会占据越来越多的磁盘空间,甚至多达上百GB。 在面对如此大量的存储数据时,无论是QQ自带的清理工具,还是手机管家之类系统自带的清理工具,其实往往都表现很糟…...

LITESTAR 4D 新模块:Sport Plus-运动场高级照明管理模块

您是否想要一个程序以自动,简单和快速的方式设计运动区域的照明?如果是这样,LITESTAR 4D Litecalc 运动区的额外模块 Sport Plus 是理想的解决方案。区域和高桅杆定义运动区域和高杆定义中可以设定以下内容:1. 运动设施的一般区域…...

使用OpenClaw+Skill自动发布微信公众号文章

一、OpenClaw 介绍 OpenClaw 是一款‌本地优先、可自托管的AI自动化代理工具‌,可以运行在你自己的电脑上,通过各种聊天工具(飞书、QQ、Telegram 等)与你对话,帮你完成各种任务。 1.1 什么是 OpenClaw? 你可…...

受激发射损耗(STED)显微镜原理

摘要受激发射损耗(STED)显微镜描述了一种常用的技术,以实现在生物应用的超分辨率。在这种方法中,两束激光—一束正常,一束转变成甜甜圈模式—被叠加到荧光样品上。通过使用荧光过程的发射和损耗以及利用由此产生的饱和效应,与通常…...

电工操作证报名照片太大?1分钟学会照片压缩技巧

报考电工操作证,作为从事电力作业、设备维修、线路安装的一线人员,日常工作强度大、时间零散,报名办证时照片上传常常成为麻烦事。很多电工朋友已经按要求拍好证件照,清晰度、着装、背景都没问题,就因为照片文件体积太…...

在虚拟机中安装一个linux操作系统

...

ch4_1

//--------------------- // ch4_1.cpp //--------------------- #include<iostream> using namespace std; //--------------------- int main(){int i1,sum0; //初始化while(i<100){sumsumi;ii1;}cout<<"sum "<<sum<<endl; }//---…...

AgenticAIoT - 自进化智能物联网平台

AgenticAIoT - 自进化智能物联网平台 平台简介 AgenticAIoT 是一款企业级自进化智能物联网平台,深度融合 AI 大模型、物联网(IoT) 与 AI 自主编程 三大核心能力。平台以"智能设备接入 + 数据智能流转 + 规则引擎联动 + AI 决策运维 + 自主进化"为核心理念,提供…...

redhat8安装教程

一&#xff0c;下载vm,redhat8的镜像文件与Xshall VM 的安装地址&#xff1a;VMware-workstation-full-17.6.1-24319023.exe_免费高速下载|百度网盘-分享无限制 redhat8镜像文件&#xff1a; RHEL-server-8.0-x86_64-LinuxProbe.Com.iso_免费高速下载|百度网盘-分享无限制 …...