【问题标题】:How do I test my implementation of LT codes?如何测试我的 LT 代码的实现?
【发布时间】:2012-09-21 06:35:16
【问题描述】:

受 Nick Johnson 的博客 Damn Cool Algorithms: Fountain Codes 的启发,我决定尝试实施 Luby Transform (LT) code。我只是推到GitHub;它是用 Python 3 编写的。

我使用一个仅包含“hello”的非常短的文件来开发它,并在一个随机生成的 1MB 文件上进行了测试。该软件似乎对文件进行了有效的编码和解码,只有原始文件的长度、块大小和编码器和解码器之间共享的液滴。

问题是,我应该如何证明这确实是 LT 代码的忠实实现?如何证明解码算法是有效的?

我的意图是 Python 的计数引用系统会删除使用过的液滴。 我如何检查这确实发生了?

也欢迎对代码本身提供任何反馈,尽管它可能更适合作为评论(而不是答案)或 GitHub 上的问题。

【问题讨论】:

  • 虽然this question 不是您的专属,但它可能会有所帮助。
  • 关于引用计数我认为你根本做不到。首先,python 语言可能经过了很好的测试,所以应该不会有太多的内存泄漏。其次,它高度依赖于版本(X.Y 中发现的内存泄漏,将在下一个版本中修复)。通常,您只需将语言视为“完美”即可。除了已知的错误,我会说。顺便说一句,即使试图用汇编语言证明某些东西也行不通,因为硬件可能有错误,所以这是一个你无法完全消除的限制。
  • @Bakuriu 感谢您的回答。我并不是要证明没有内存泄漏,而是在我认为应该删除的时候删除对象。
  • 能否请您指导我到一个用 C 实现 LT 代码的地方?我在互联网上找不到来源

标签: python testing


【解决方案1】:

如果您只想查看引用计数是否有效,您可以在您的类中定义__del__ 方法。请注意,这将阻止循环 GC 处理这些类

另一种方法是查看类的引用计数的变化,因为每个实例都持有对该类的引用

>>> from sys import getrefcount
>>> class Obj(object):
...  pass
... 
>>> sys.getrefcount(Obj)
5
>>> obj_list=[Obj() for x in range(5)]
>>> sys.getrefcount(Obj)
10
>>> obj_list[:3]=[]
>>> sys.getrefcount(Obj)
7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多