相关疑难解决方法(0)

如何提高此代码的性能?

感谢来自这里的人们的帮助,我能够获得塔斯马尼亚骆驼拼图工作的代码.然而,它非常慢(我想.我不确定,因为这是我在Python中的第一个程序).在代码底部运行的示例需要很长时间才能在我的机器中解决:

dumrat@dumrat:~/programming/python$ time python camels.py
[['F', 'F', 'F', 'G', 'B', 'B', 'B'], ['F', 'F', 'G', 'F', 'B', 'B', 'B'],
 ['F', 'F', 'B', 'F', 'G', 'B', 'B'], ['F', 'F', 'B', 'F', 'B', 'G', 'B'],
 ['F', 'F', 'B', 'G', 'B', 'F', 'B'], ['F', 'G', 'B', 'F', 'B', 'F', 'B'],
 ['G', 'F', 'B', 'F', 'B', 'F', 'B'], ['B', 'F', 'G', 'F', 'B', 'F', 'B'],
 ['B', 'F', 'B', 'F', 'G', 'F', 'B'], ['B', 'F', 'B', 'F', 'B', 'F', 'G'],
 ['B', 'F', 'B', 'F', 'B', …
Run Code Online (Sandbox Code Playgroud)

python optimization performance time-complexity

38
推荐指数
3
解决办法
2万
查看次数

计算Python字典中的冲突

我第一次在这里发帖,所以希望我以正确的方式问我的问题,

将元素添加到Python字典后,是否可以让Python告诉您添加该元素是否导致了冲突?(在找到放置元素的位置之前,碰撞解决策略探测了多少个位置?)

我的问题是:我使用字典作为更大项目的一部分,经过大量的分析后,我发现代码中最慢的部分是处理使用字典实现的稀疏距离矩阵.

我正在使用的键是Python对象的ID,它们是唯一的整数,所以我知道它们都散列为不同的值.但是将它们放在字典中仍然可能导致原则上的冲突.我不相信字典冲突会减慢我的程序速度,但我想从我的查询中删除它们.

因此,例如,给出以下字典:

d = {}
for i in xrange(15000):
    d[random.randint(15000000, 18000000)] = 0
Run Code Online (Sandbox Code Playgroud)

你能让Python告诉你创建它时发生了多少次碰撞吗?

我的实际代码与应用程序纠缠在一起,但上面的代码生成了一个与我正在使用的字典非常相似的字典.

重复:我不认为碰撞会减慢我的代码速度,我只是想通过显示我的字典没有多次碰撞来消除这种可能性.

谢谢你的帮助.

编辑:实现@Winston Ewert解决方案的一些代码:

n = 1500
global collision_count
collision_count = 0

class Foo():

    def __eq__(self, other):
        global collision_count
        collision_count += 1
        return id(self) == id(other)

    def __hash__(self):
        #return id(self) # @John Machin: yes, I know!
        return 1

objects = [Foo() for i in xrange(n)]

d = {}
for o in objects:
    d[o] = 1

print collision_count
Run Code Online (Sandbox Code Playgroud)

请注意,当您__eq__在类上定义时,TypeError: …

python optimization dictionary

15
推荐指数
2
解决办法
6234
查看次数