我们可以使用贪心算法而不是动态规划来解决“整齐打印”问题吗?

2023-12-24

《算法导论》书中的“打印整齐”问题是通过动态规划来解决的。是问题5.3,已找到解决方案here https://segue.middlebury.edu/repository/viewfile/polyphony-repository___repository_id/edu.middlebury.segue.sites_repository/polyphony-repository___asset_id/5299281/polyphony-repository___record_id/5299282/polyphony-repository___file_name/PrintingNeatly.pdf

我认为这个问题可以通过贪心算法简单地解决。每行放入尽可能多的单词,直到无法容纳下一个单词为止,然后移至新行。

有人可以帮助我理解这个解决方案是否足够吗? (贪心算法)

问题是:打印整齐

考虑在打印机上整齐地打印一个段落的问题。输入文本是长度为 l1,l2,...,ln 的 n 个单词的序列,以字符为单位。我们希望将此段落整齐地打印在多行上,每行最多包含 M 个字符。我们的“整洁”标准如下。如果给定行包含单词 i 到 j,并且我们在单词之间留出一个空格,则该行末尾的额外空格字符数是 M 与单词中的字符总数加上单词之间的空格数之间的差值。我们希望最小化除最后一行之外的所有行中行尾额外空格字符数量的立方之和。给出一个动态编程算法,在打印机上整齐地打印一段 n 个单词。分析算法的运行时间和空间要求。


不,因为贪婪算法经常出现这种情况,现在短视的决策(决定当前行有多少单词)最终会迫使以后付出更高的成本。例如,假设每行可以有 10 个字符。

贪心解

xx xxx xx    cost = 1
xxxxx        cost = 125
xxxxx        cost = 0 (last line)

更好的解决方案

xx xxx       cost = 64
xx xxxxx     cost = 8
xxxxx        cost = 0 (last line)

贪婪的解决方案将更多的单词打包到第一行,但这实际上会产生更高的总解决方案成本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以使用贪心算法而不是动态规划来解决“整齐打印”问题吗? 的相关文章

  • 用于插入/删除/排名/选择查询的最佳数据结构/算法

    到目前为止 我知道像AVL树和红黑树这样的自平衡BST可以在O log n 次内完成这些操作 然而 要使用这些结构 我们必须自己实现AVL树或RB树 我听说有一个算法 实现这四个操作而不使用自平衡 BST 有了我们自己定义的结构 我们就需要
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • Java:如何实现3和?

    我正在研究 3 Sum 来自己实现它 并遇到了以下规则的实现 给定一个由 n 个整数组成的数组 S S 中是否存在满足 a b c 0 的元素 a b c 查找数组中所有总和为零的唯一三元组 注意 三元组 a b c 中的元素必须按非降序排
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • Python 给定 k 个分区的整数分区

    我正在尝试寻找或开发Python 的整数分区代码 仅供参考 整数分区将给定整数 n 表示为小于 n 的整数之和 例如 整数5可以表示为4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 我为此找到了许多解决方案 ht
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有

随机推荐

  • 如何确保嵌套事务彼此独立提交?

    如果我有一个存储过程使用不同的参数多次执行另一个存储过程 是否可以让每个调用独立于其他调用提交 换句话说 如果嵌套过程的前两次执行成功 但第三次执行失败 是否可以保留前两次执行的结果 而不是回滚它们 我在 SQL Server 2000 中
  • 进程堆段及其必要性

    在转储 win32 进程的堆时 主要是在像 IE 这样具有高堆内存消耗的进程中 使用 堆 a 004e0000我发现特定堆的多个段 例如 Heap entries for Segment00 in Heap 004e0000 Heap en
  • 使用 Nhibernate 将依赖项注入域模型类 (ASP.NET MVC + IOC)

    我正在构建一个 ASP NET MVC 应用程序 该应用程序使用 DDD 域驱动设计 方法 并由 NHibernate 处理数据库访问 我有域模型类 管理员 我想通过 IOC 容器 例如温莎城堡 将依赖项注入到其中 如下所示 public
  • 扩展方法的 resharper 智能感知问题

    所以 我有一个使用如下方法定义的存储库 IQueryable
  • 处理相机旋转的正确方法

    让我们首先考虑两种类型的相机旋转 相机绕点旋转 轨道 def rotate around target self target delta right self target self eye cross self up normalize
  • 从第三方库和 JAR 中删除不必要的类[重复]

    这个问题在这里已经有答案了 我需要从第三方 JAR 中删除未使用的类 为什么我应该使用工具 我已经尝试使用ProGuard http proguard sourceforge net 但是 它仅从项目本身中删除未使用的类 但第三方库 jar
  • Python Colorlog 未在日志文件中打印颜色

    我使用 Python colorlogs 为不同级别的日志设置不同的颜色 当我运行代码时 控制台日志是彩色的 但日志文件没有颜色 我正在使用下面的代码 def setup logger logfiletouse Return a logge
  • 从命令行与本地长期运行的 Common Lisp 镜像(可能是守护进程)进行交互

    如何从命令行与本地长期运行的 Common Lisp 映像 可能是守护进程 进行交互 我知道有可能从终端命令提示符运行 Common Lisp 函数 https stackoverflow com questions 20301668 ru
  • JavaScript 永远悬而未决的承诺是坏事吗?

    说我有一个承诺叫myProm 并说我有成功和错误处理程序onSuccess and onError 每当我的 Promise 需要超过 10 秒才能完成时 我想要一个名为timeoutHandler被处决 但如果发生这种情况 onSucce
  • 如何设置 SELECT 下拉列表中可见的最大项目数?

    我有一个大约 30 个项目的下拉列表 我只想显示 8 个项目 然后下拉列表应该滚动 我在VS2010中使用MVC2 你有没有尝试过size代替rows 根据w3http www w3schools com tags att select s
  • asp.net C# 生成用户控制参数

    ASP net 对我来说是新的 并且我被交给了一个现有的项目来处理 我这样写 Asp Net WebForms 如何将 ViewData 作为参数传递给用户控件 https stackoverflow com questions 46150
  • 将matlab图形保存到指定目录的脚本

    假设我在 matlab 中打开了几个图形 我想要一些可以调用的函数 例如save all figures to directory dir name 这将迭代所有图形并将它们保存到指定的文件夹中 我该怎么做呢 可以使用Matlab函数fin
  • pytesseract 不适用于一位数字图像

    我有使用 pytesseract 的代码并且工作完美 只有当我尝试识别的图像是 0 到 9 时才不起作用 如果图像只有一位数字 则不会给出任何结果 这是我正在工作的图像样本 这是我正在使用的代码 import pytesseract var
  • Scala:值 :: 不是 Int 的成员

    我最近开始使用 scala 但我无法获取任何错误消息 对于以下代码 我得到指定的消息 使用 eclipse def helper Int gt List Int x gt x match case 2 gt 2 1 我可以使用 List 2
  • getSignedUrl() 和 getDownloadUrl() 之间的区别

    Node js 上的 get getSignedUrl 方法与 SDK 上的 getDownloadURL 方法有什么区别 我用的是颤动 与我在云函数中使用的 getSignedUrl 一样 当图像更改时返回的url不会更改 具有相同的文件
  • 作为一个原子操作插入到 azure cosmos db 中的多个容器

    我对 Azure Cosmos DB 有点陌生 我想知道它是否可以选择将多个容器上的多个操作作为一个原子操作 例如 所有成功或失败都来自 NET 后端 对于单个容器中的单个操作来说 操作是原子的 如果您使用存储过程 则可以在单个容器内的单个
  • Microsoft Excel 保存文件时使用什么字符集?

    我有一个 Java 应用程序 可以读取在 Excel 中创建的 CSV 文件 例如 2007 有谁知道 MS Excel 使用什么字符集来保存这些文件 我会猜测 windows 1255 Cp1255 ISO 8859 1 UTF8 但我无
  • 保护 ajax 请求的安全

    我有一个使用会话 cookie 来确保安全的网站 它工作得很好 但是现在任何 ajax 请求都不安全 例如 假设用户在某个页面上 他们只有通过会话登录才能访问此页面 到目前为止一切顺利 但现在他们要求的ajax请求是 ajaxpages s
  • Gradle 工件插件无法解决对配置阶段的依赖

    我正在尝试使用artifactory gradle 插件解决配置阶段的依赖关系 apply plugin java apply plugin com jfrog artifactory artifactory contextUrl arti
  • 我们可以使用贪心算法而不是动态规划来解决“整齐打印”问题吗?

    算法导论 书中的 打印整齐 问题是通过动态规划来解决的 是问题5 3 已找到解决方案here https segue middlebury edu repository viewfile polyphony repository repos