【问题标题】:How to implement an XOR Linked List in Python?如何在 Python 中实现 XOR 链表?
【发布时间】:2018-03-06 04:53:06
【问题描述】:

鉴于 python 对象只是对实际内存对象的引用,并且 无法检索对象的内存地址。

是否可以在 Python 中实现 XOR 链表?如果是怎么办?

【问题讨论】:

  • 看看这个geeksforgeeks.org/…
  • 我已经阅读了这篇文章。问题是第一个节点之前的 ptr 是 None 和 None 的 XOR 并且某些值会抛出 TypeError: unsupported operand type(s) for ^: 'NoneType' and 'int'
  • 您是否只需要行为类似于 XOR 链表(恒定时间反转)的东西,还是出于某种原因必须完全按照这种方式实现它?

标签: python python-3.x data-structures linked-list xor


【解决方案1】:

您不能在 Python 中构建 XOR 链表,因为 Python 不允许您弄乱指针中的位。

无论如何,您都不想实现它 - 这是一个肮脏的技巧,使您的代码难以理解而没有什么好处。

如果您担心内存问题,最好使用每个节点包含 1 个以上元素的双向链表,例如数组的链表。

例如,XOR 链表每项花费 1 个指针,加上项本身,但每个节点 16 项的双向链表每 16 项花费 3 个指针,或每项花费 3/16 个指针。 (额外的指针是记录节点中有多少项的整数的成本)小于 1。在 Python 中有额外的开销,但它仍然工作得更好。

除了节省内存之外,您还可以获得局部性优势,因为节点中的所有 16 个项目在内存中都彼此相邻。遍历列表的算法会更快。

请注意,异或链表还要求您在每次添加或删除节点时分配或释放内存,这是一项昂贵的操作。使用数组链表,您可以通过允许节点不完全充满来做得更好。例如,如果您允许 5 个空项目插槽,那么您最多只能在每 3 次插入或删除时分配或释放内存。

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 2020-01-26
    • 2016-09-11
    • 1970-01-01
    • 2011-01-21
    • 2014-09-15
    • 2018-04-02
    相关资源
    最近更新 更多