关于手指树,如本文所见并在Eric Lippert的这篇文章中提到。
我不明白为什么要使用显式的元组排列,而不是每个手指的某种链表结构。也就是说,为什么我们要定义One(x), Two(x, y), Three(x, y, z), Four(x, y, z, a)
而不是仅仅拥有一个不太理想的双端队列对象LessOptimalDeque.AddLeft(x)
呢?
是不是有点慢?我的意思是,即使您可以使用某些数据结构来重新使用某些节点/节点组的内存?
在论文中,它甚至提到:
练习 1. 在上面的演示中,为简单起见,我们将数字表示为列表。更准确和更有效的实现将使用该类型
data Digit a = One a
| Two a a
| Three a a a
| Four a a a a
修改上述定义以使用此数字定义。
我不知道为什么它更有效。它是否仅与作者使用的功能语言相关,否则也可以使用我上面提出的数据结构来完成?
编辑
像这样实现手指怎么样?