Knuth 计算机编程艺术 ex 1.1.8

2024-03-23

我无法理解 Knuth 在第 1.1 章练习 8 的说明中的含义。

任务是制定一个有效的两个正整数的 gcd 算法m and n使用他的符号theta[j], phi[j], b[j] and a[j]其中 theta 和 phi 是字符串,a and b- 代表本例中计算步骤的正整数。

令输入为以下形式的字符串a^mb^n.

Knuth 算法的一个很好的解释是施纳德 https://stackoverflow.com/users/34065/schnaader here https://stackoverflow.com/questions/575215/the-art-of-computer-programming-exercise-question-chapter-1-question-8/575315?s=15%7C2.9207#575315.

我的问题是这如何与使用书中给出的算法 E 的练习中给出的方向联系起来r(余数)替换为|m-n| and n替换为min(m,n).


当 Knuth 说“让输入由字符串表示a^mb^n”,他的意思是输入应该采取以下形式m数量as and n数量bs。所以输入f((m,n)) where m = 3 and n = 2将由字符串表示aaabb.

花点时间回顾一下该章中的方程 3,它代表马尔可夫算法 http://en.wikipedia.org/wiki/Markov_algorithm。 (以下)

        f((σ,j)) = (σ,a_j)        if θ_j does not occur in σ
        f((σ,j)) = (αφ_jω,b_j)    if α is the shortest string for which σ = αθ_jω
        f((σ,N)) = (σ,N)

所以想法是定义每个变量的序列j, θ_j, φ_j, a_j & b_j。这样,使用上面的马尔可夫算法,您可以指定输入字符串会发生什么,具体取决于j.

现在,进入你的主要问题;

我的问题是,这如何与练习中给出的方向联系起来,以使用书中给出的算法E,并将原始r(余数)替换为|m-n|并且n被min(m,n)替代。

本质上,Knuth 在这里所说的是,你不能用上述马尔可夫算法进行除法。那么最接近除法的是什么?好吧,本质上我们可以从较大的数字中减去较小的数字,直到剩下余数。例如;

10 % 4 = 2与执行以下操作相同;

        10 - 4 = 6        Can we remove another 4? Yes. Do it again.
        6  - 4 = 2        Can we remove another 4? No. We have our remainder.

现在我们有了剩下的部分。这本质上就是他希望您对我们的输入字符串执行的操作,例如aaabb.

如果您仔细阅读了书后 Knuth 的建议答案并完成了几个示例,您会发现这本质上就是他通过删除配对所做的事情ab然后添加一个c直到不再有配对为止ab存在。以我在顶部使用的示例为例,我们可以对字符串进行这样的操作aaabb, aab, caab, ca, cca, ccb, aab (then start again)

哪个是相同的r = m % n, m = n, n = r (then start again)。当然,不同之处在于,在上面我们使用了模运算符和除法,但在上面的示例中我们只使用了减法。

我希望这有帮助。其实我写了一篇关于 Knuth 对马尔可夫算法的变体的更深入的分析 http://www.rudikershaw.com/articles/computationalmethod3在我的博客上。因此,如果您仍然感觉有点困难,请阅读该系列。

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

Knuth 计算机编程艺术 ex 1.1.8 的相关文章

  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 在 O(log n) 中查找排序矩阵(行 n 列)中的数字 [重复]

    这个问题在这里已经有答案了 假设我有一个矩阵 MxN 其行和列已排序 每行中的所有元素均按升序排列 每列中的所有元素均按升序排列 所有元素均为整数 无法做出其他假设 Example 1 5 8 20 2 9 19 21 12 15 25 3
  • 生成字符串及其子字符串列表的排列的算法

    我已经忘记这个算法有一段时间了 假设我得到了字符串 cccaatt 我试图生成重复字母的每个子串的所有可能变体 EG cccaatt 作为输入将返回 猫 卡特 猫 卡特 ccat 卡特 卡特彼勒 卡特彼勒 cccat cccat cccaa
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 数组中的重复元素[重复]

    这个问题在这里已经有答案了 这有点与this https stackoverflow com questions 2605766 how to find a duplicate element in an array of shuffled
  • Python 中的空填字游戏求解器

    我得到了一个包含填字游戏蓝图的矩阵 当然 它是空的 我们的目标是填补整个难题 这是 Checkio 的一项任务 我已经为此奋斗了相当长一段时间 根据我对复杂性的理解 这个问题没有完美的算法 不过 必须有最好的方法来做到这一点 对吧 我尝试了
  • 数组中最远的相等元素

    假设你有一个未排序的数组 你如何找到两个相等的元素 使它们成为数组中最远的元素 例如8 7 3 4 7 5 3 9 3 7 9 0ans 将是7 9 7 1 8 我想到了以下几点 initialise max 0 using hashing
  • 如何设计一种算法来计算倒数式数学数字难题

    我一直想这样做 但每次我开始思考这个问题时 它的指数性质都会让我大吃一惊 我希望能够理解的问题解决器和代码是针对倒计时数学问题的 给定一组数字 X1 到 X5 计算如何使用数学运算将它们组合起来生成 Y 您可以应用乘法 除法 加法和减法 那
  • Google 文档如何处理编辑冲突?

    我一直在尝试编写自己的 Javascript 编辑器 其功能类似于 Google Docs 允许多人同时使用 我不明白一件事 假设用户 A 和用户 B 直接相互连接 网络延迟为 10 毫秒 我假设编辑器使用 diff 系统 据我了解 Doc
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto

随机推荐

  • 在 Python 3 中创建抽象属性会导致 AttributeError

    如何在 python 中创建抽象属性 import abc class MyClass abc ABC abc abstractmethod property def foo self pass 结果出现错误AttributeError a
  • 如何将 PostgreSQL 数据库迁移到 SQLServer 数据库?

    我有一个 PostgreSQL 数据库 我想将其迁移到 SQL Server 架构和数据 我很穷 所以我不想付任何钱 我也很懒 所以不想做太多工作 目前我正在逐个桌子做这个 大约有100个桌子要做 这是极其乏味的 有什么技巧可以达到我想要的
  • JavaScript 支持的网站的自动导航

    我需要在 Python 中自动导航 JavaScript 支持的网站 以便我可以抓取一些内容 我碰到鸡足 http groups csail mit edu uid chickenfoot quickstart html 这是一个 Fire
  • 使用 CakePHP 分页助手进行引导分页

    我正在尝试让 CakePHP 的分页助手与 bootstrap 很好地配合 也就是说 我希望我的分页元素看起来像 bootstrap 的 但由 CakePHP 生成 目前我的视图页面上有这个 它产生以下标记 div class pagina
  • 在 C 中使用 mmap 读取二进制文件时出现段错误

    我正在尝试在 C 中使用 mmap 只是为了看看它到底是如何工作的 目前我尝试使用 mmap 逐字节读取二进制文件 我的代码是这样的 include
  • Android - 在 invalidate() 上重绘后监听器

    在我要求视图失效后 我希望在视图完成重绘后收到通知 正如中所述这个答案 https stackoverflow com a 5073130 72746 the invalidate 方法不调用视图的onDraw UI 立即执行 但会在消息队
  • 索引 null 变量时未引发 php 未定义索引通知

    我很想知道 PHP 中的以下行为是否是有意的 而且 如果有意的话 通过创建索引来从空变量初始化数组被认为是可以接受的 如第一个代码片段中所做的那样 error reporting E ALL arr null echo arr blah n
  • 我可以制作两栏水晶报表吗?

    我有一份报告 其中包含该月每一天的一个详细信息行 我想在左侧的一个 组列 中显示第 1 到 15 天的信息 在右侧显示其他天的信息 每个 组列 都包含四个信息列 我可以通过拆分报告数据库查询列来手动完成此操作 但我真的希望有一种更优雅的方法
  • Objective C 距离字符串格式化程序

    我有一个距离作为浮动 我正在寻找一种方法来为人类读者很好地格式化它 理想情况下 我希望随着它变大 它从 m 变为 km 并很好地舍入数字 转换成里程将是一个额外的好处 我确信很多人都需要其中之一 我希望有一些代码在某个地方 这是我想要的格式
  • 在init块中初始化变量并在kotlin中为该变量定义一个setter

    我想写这段代码 但它不起作用 private var a Int set value field a Code init a 2 我必须在声明变量时对其进行初始化 为什么会发生这种情况 我该如何解决 您的属性有一个自定义设置器 当您调用时a
  • Magento:在一页结账中显示审核步骤

    我一生都无法弄清楚这一点 我想立即在 Magento 的一页结账上显示订单审核步骤 处理订单之前的最后一步 有什么建议么 谢谢大家 如果你查看 onepage phtml 的底部 你会看到 accordion openSection opc
  • 如何通过 Scala 中的 Play Framework 2.5 流式传输压缩文件(即时)?

    我想流式传输一些文件并即时压缩它们 以便用户可以将多个文件下载到一个压缩文件中 而无需向本地磁盘写入任何内容 但是 我当前的实现将所有内容保存在内存中 并且不适用于大文件 有什么办法可以解决吗 我正在研究这个实现 https gist gi
  • FCM 数据消息无法在 Firefox 中加载

    我正在使用 Web FCM 进行云消息传递 当我发送一个通知有了标题和正文 Firefox 和 Chrome 都会显示通知并且工作正常 但是当我尝试发送 FCM 时Data消息 Firefox 不接收和记录消息 我正在使用一个HTTPS安全
  • 如何鼓励 MediaWiki 上的非匿名编辑?

    Problem 在工作中我们有一个部门维基 运行媒体维基 http www mediawiki org 不幸的是有几个 人们在没有登录的情况下进行编辑 这使得追踪变得非常困难 向下编辑询问有关内容的问题 有两种策略可以改善这一点 鼓励登录编
  • Jquery .delay().fadeOut 取消/清除队列..可能吗?如何?

    我需要一些帮助 是否可以取消链接延迟 Mn Base TopBox show function timedur element fadeIn delay timedur fadeOut Mn Base TopBox cancelFadeou
  • Android:ScrollView 不滚动

    我正在尝试创建一个布局 其中包含标题 标题下方的横幅 然后横幅下有几个 ListView 我希望除标题之外的整个屏幕都可以滚动 现在我知道 ListView 不会在 ScrollView 中滚动 因此我将 ListView 的高度设置得足够
  • wpf mvvm ..访问视图模型中的视图元素

    我正处于学习 wpf mvvm 的阶段 因为我知道在 vm 中我们声明命令并将它们绑定到视图元素的事件 而不是在代码隐藏文件中执行此操作 我没有得到的是 我们将如何访问视图元素和事件参数 您的 ViewModel 不会直接访问视图中的元素
  • Luis 的 Azure 密钥不可用

    我正在尝试发布我的 LUIS 应用程序的暂存版本 我已在 Azure 澳大利亚东部设置了认知服务应用程序 并且可以在 Azure 门户中看到密钥 然而在 AU Luis 门户网站中https au luis ai https au luis
  • 使用相同的 udp 套接字进行异步接收/发送

    我在 udp 服务器中使用相同的套接字 以便在某个端口上接收来自客户端的数据 然后在处理请求后使用 ip ud socket async send to 响应客户端 接收也是与 async receive from 异步完成的 套接字使用相
  • Knuth 计算机编程艺术 ex 1.1.8

    我无法理解 Knuth 在第 1 1 章练习 8 的说明中的含义 任务是制定一个有效的两个正整数的 gcd 算法m and n使用他的符号theta j phi j b j and a j 其中 theta 和 phi 是字符串 a and