【发布时间】:2015-07-23 09:17:43
【问题描述】:
我试图实现这篇研究论文中指定的算法:
[这里 - 请忽略数学,因为它与问题无关] [2]。该算法在形式概念分析中非常基础。输入是一个矩阵NXM,在.txt 文件中存储为X 和.。根据论文中嵌入的伪代码,输入也必须表示为矩阵
【问题讨论】:
-
假设您的实际测试测量忽略了 JIT 时间并且您在没有调试器的情况下运行发布版本...下一步将是用户分析器并查看花费最多的时间...通常这样的问题会引起人们的兴趣和您无需任何努力即可获得优化版本(这主要是机会游戏)。
-
如果没有可靠地证明问题的a good, minimal, complete code example,您不太可能得到任何有帮助的具体答案。至于“C#是否与C++一样好”,当然是,但每种语言都有其优点和缺点。尽管如此,即使是一个天真的 C++ 算法实现的版本也应该在非托管代码的性能的 10-20% 范围内,并且通过努力(并且可能使用
unsafe代码)应该能够实现奇偶校验。对于正确完成的端口,35 倍的差异是闻所未闻的。 -
如果没有将 C++ 源代码作为参考,很难回答这个问题。您的代码是否产生正确的结果?
-
实际上,确实如此,只是做得很奇怪,如果您可以发布一个我们可以自己编译的完整示例,并具有预期的输出,那么可以将您的代码重构为更正常的 C#
-
在
generate_from中,新的int[] Ds在for (int j和compute_closure中重复分配。 D 始终为CT_WIDTH大小,并且在每次j-iteration 之后不再使用。您可以通过在for(int j循环和calculate_closure调用之间重用 Ds 来相同的一些内存和 GC 时间。而不是int[] D; /.../ D=compute_closure,预先创建 D 并将其传递给函数:int[] D = new int[xxx]; /.../ compute_closure(D, B, j)+ 从closure中删除 D 的分配.. 我怀疑这就是全部,但有点确定。
标签: c# c++ algorithm performance optimization