问题标签 [knuth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
50 浏览

javascript - 用文字代替数字?Fisher-Yates 随机化

我在这里找到了关于 Fisher-Yates 和随机化的非常有趣的东西:如何随机化(随机播放)JavaScript 数组?

内容!

现在我想用名字替换这 30 位数字(例如:Thomas、Adrian、James、Patrick、Victor...)

我怎样才能做到这一点?我对此很陌生,我迈出了第一步

0 投票
1 回答
30 浏览

garbage-collection - Knuth GC 堆栈溢出预防算法 - 它是如何工作的?

我正在阅读垃圾收集。Algorithmis for Automatic Dynamic Memory Management一书,并试图写一篇关于它的博客文章。我专注于标记扫描一章,作者讨论使用辅助堆栈,以避免标记扫描溢出“正常”堆栈。到现在为止还挺好。

在专门讨论辅助栈的栈溢出的小节里,直接引用了一句:

Knuth 通过循环处理标记堆栈来处理溢出,将指向节点的指针堆栈以 h 为模,其中 h 是堆栈的固定大小。这意味着当堆栈索引增长大于 h 时,堆栈上较旧的分支点信息将被覆盖。因此,堆栈可能在标记过程完成之前变空,因为标记堆栈上的指针已被覆盖的节点下方的实时图可能尚未被标记。

据我了解,GC过程从根开始遍历对象,添加指向辅助堆栈的指针。这很容易。但是,这个堆栈有一个特定的大小(这是为了防止溢出)。当这种情况发生时,向该堆栈添加新指针将大于限制(导致 SO),现有条目将被丢弃,以便为新条目腾出空间。我就是这么理解的。

我的问题是这句话:

因此,堆栈可能在标记过程完成之前变空,因为标记堆栈上的指针已被覆盖的节点下方的实时图可能尚未被标记。

英语不是我的母语,这里讨论的话题并非微不足道,但我只需要一个答案——根据上面的句子,这个机制是如何工作的?为什么堆栈应该被清空,而不是保持恒定 <= h 的条目数量?

PS。在琼斯的第二本书- “垃圾收集手册”中,没有关于上述主题的消息,所以很遗憾我无法比较措辞/表述。

0 投票
1 回答
38 浏览

assembly - 为什么在 MIX 上编写的 Donald Knuths 第一程序中的 ADD 命令将溢出设置为 ON?

这是程序:

到目前为止我所知道的:

  • STZ 1 将下一条指令设置为 NOP,因此可以忽略第二条指令
  • 根据答案 - ADD 函数应该触发溢出。
  • ADD 函数应该将内存 1 的内容添加到寄存器 A

使用第一个命令将存储器 1 设置为零 - ADD 功能应该简单地将零添加到寄存器 A。

如果 Mem1 设置为零,这如何将溢出切换设置为打开?

REF:计算机编程的艺术第 1 卷第 142 页问题 18