如何通过排名提高价值搜索?

时间:2015-05-23 10:12:31

标签: python algorithm

我有一个包价值:

{'1': 2, '2': 1,'6': 3, '3': 5}

这意味着:

{'1', '1', '2','6', '6', '6', '3', '3', '3', '3'}

我这样做:

  1. 按键排序,因此变为:{'1': 2, '2': 1, '3': 5,'6': 3}

  2. 获取第N个值。所以如果我想要第3个值,它应该返回'2'

  3. 我正在做的是:

    def getNth(scores, rank):
        scores = sorted(scores.items(), key=operator.itemgetter(0))
    
        total = 0
        for score, cnt in scores:
            total += cnt
            if  total > rank:
                return score
    

    我想知道我能快点吗?

1 个答案:

答案 0 :(得分:0)

如果你不在这里重新生成分数,你可以(根据我在下面的实验中)将运行时减半:

scores = sorted(scores.items(), key=operator.itemgetter(0))

我创建了一个避免这种情况的修改方法:

def getNth2(scores, rank):
  total = 0
  for i in sorted(scores.keys()):
    total += scores[i]
    if  total > rank:
        return i

测量运行时here

start_time = time.time()
for i in xrange(0,100000):
  for i in xrange(0,10):
    getNth(d, i)
end_time = time.time()
print 'Old Runtime:', end_time - start_time

start_time = time.time()
for i in range(0,100000):
  for i in xrange(0,10):
    getNth2(d, i)
end_time = time.time()
print 'New Runtime:', end_time - start_time
  

旧运行时间:2.22607803345

     

新运行时:1.09168481827