David Wheeler 格言中的“间接程度”是啥意思?

Posted

技术标签:

【中文标题】David Wheeler 格言中的“间接程度”是啥意思?【英文标题】:What does "level of indirection" mean in David Wheeler's aphorism?David Wheeler 格言中的“间接程度”是什么意思? 【发布时间】:2013-08-02 22:28:02 【问题描述】:

我在一本书中读过这句话:

在计算机科学中,没有任何问题不能使用另一个间接级别来解决。

有人能解释一下吗? “间接级别”是什么意思?

据我了解,间接是一个花哨的名称,用于使用值的指针而不是值本身。请为我澄清这一点。

【问题讨论】:

你忘记了这句话的其余部分“......除了太多的轻率” 我认为这与将数据层抽象为对象有关,并在各个抽象级别处理手头的问题(在不同的对象中,也许在 OOP 范式中)。跨度> Level of Indirection solves every Problem 的可能副本。另请参阅 What is the difference between layer of abstraction and level of indirection? 和 the rest of the web。 【参考方案1】:

好问题!实际上,我在我的数据库课程中遇到了level of indirection 这个术语。本课程的幻灯片甚至没有提供有关“间接”或如何使用它的任何信息,但它向学生提出了这样一个问题: ... suppose the file is unordered by the non-key field DEPTNUMBER and we want to construct a secondary index on DEPTNUMBER with one level of indirection that stores record pointers.

你提到的理解让我明白了微妙的事情: From what I understood, indirection is a fancy name for using a pointer of a value instead of the value itself.

这里我在问题中附上一张图片来说明。所谓level of indirection不过是一些包含pointers的内存块,是indexesdata之间的桥梁。因此,在这里,它不是为数据文件中的每条记录设置一个索引,而是使用由pointers 组成的附加层,使索引文件和间接级别(记录指针块)之间的索引稀疏。 我对此的理解是,它通过为unordered 数据文件提供稀疏(非密集)索引和密集索引,在内存使用和查找速度之间提供了良好的折衷。

不幸的是,我无法为 level of indirection 这个术语找到一个很好的解释关于它在互联网上的数据库实现,而我学校的幻灯片只是垃圾(它甚至没有涵盖它但他们对此提出质疑)。

如果您有好的来源或者我在这里有任何错误,请发表评论。我真的很感激!

【讨论】:

【参考方案2】:

“间接”是在最广泛的意义上使用使用其他东西的东西。

因此,您的示例使用值的指针而不是值的指针,在一个级别上符合此定义。指针是东西,值是别的东西。

通常这是范围更大的东西:

使用网站以图形方式显示由基于 XML 的服务生成的数据。在这里,网站是某种东西,而隐藏在它后面的是其他东西的数据。 使用操作系统访问显示屏幕。这里有两层,至少是间接的。操作系统使用屏幕驱动程序。一种东西使用另一种东西。然后屏幕驱动程序直接与屏幕硬件对话,使其在各处产生微小的光点。驱动程序是下一个使用硬件的东西。 一个 API 在高层处理某事而该 API 在较低级别处理同一事物的情况并不少见。在低级 API 之上再次添加了一层间接性,我们将其称为新的改进 API。

也许最后一个例子解释了这一切的“原因”。

当我们使用某些东西时,我们会掌握它并学习如何将其抽象到更高的抽象级别,因此需要一个新的间接级别,我们可以通过将一些工作卸载到新的 API 来更快地解决更大的问题。

【讨论】:

当然,另外一个间接层无法解决的问题是当你的间接层太多时。 @LeeMeador 没问题。只需添加另一个间接维度:开始对原始间接层进行分组(分组是间接的一种形式)并继续处理层组 - 用邪恶的微笑解决了问题。【参考方案3】:

间接的潜在巨大优势之一是减少耦合。这是另一种说法,应该适当地划分事物。从长远来看,这通常对测试、可维护性和灵活性有很大帮助。

例如,如果您的应用程序需要读取一些持久化数据,而不是知道在哪里(以及如何)在整个应用程序中读取这些数据,您可以隔离它(将读取的数据放入一个方法中) ) 然后让应用程序的所有其他部分调用该方法来获取数据,而不是让应用程序的每个部分自己处理这些细节。

【讨论】:

以上是关于David Wheeler 格言中的“间接程度”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Burrows-Wheeler 压缩

哪种算法最适合 Burrows-Wheeler 变换?

BWT (Burrows–Wheeler_transform)数据转换算法

用于大弦的 Burrow Wheeler 实现

Burrows Wheeler 变换 - 变换向量

Burrows-Wheeler 变换 (BWT) 重复字符串