![]() |
1
50
让我们从列表的拉链模拟开始。如果要修改列表的第n个元素,则需要O(n),因为必须首先复制n-1个元素。相反,您可以将列表保持为一个结构(颠倒前n-1个元素)n个元素(其余元素))。例如,列表
拉链同样适用于树木。你在树中表示一个特定的焦点,加上一个上下文(向上到父,向下到子),它以一种形式给你整棵树,在焦点处它很容易修改,并且很容易上下移动焦点。 |
![]() |
2
12
这是一篇很好的文章解释 using the zipper for a tiling window manager in Haskell . 维基百科的文章不是很好的参考资料。 简而言之,拉链是指向树或列表结构中特定节点的指针或手柄。拉链提供了一种自然的方式来获取树结构,并将其视为被焦点节点“拾取”的树-实际上,您可以获得第二棵树,而无需额外复制原始树或影响树的其他用户。 给出的示例显示了如何按照屏幕上的位置对窗口进行原始排序,然后使用指向焦点窗口的拉链对焦点进行建模。您可以得到一组很好的O(1)操作,例如插入和删除,而无需对焦点窗口进行特殊设置或编写额外的代码。 |
![]() |
3
5
了解你一个哈斯克尔也有 a great chapter about zippers . |
![]() |
4
2
This article 与haskell有关,但它也很好地解释了拉链,应该很容易从haskell的细节中抽象出来。 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 6 月前 |
![]() |
Bioinfotec · 如何在R中将两个嵌套列表合并为一个列表? 6 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 11 月前 |
![]() |
ep84 · Python中处理扩展线性序列的快速(最快)方法 1 年前 |
![]() |
Gerry · python中高效的Merge排序实现 1 年前 |
![]() |
Noel · C#通过引用返回结构导致复制 1 年前 |