尝试查找下一个最大值时发生Python算法错误

克里斯·赖斯

我编写了一种算法,该算法扫描“ ID”文件,并将该值与整数i的值进行比较(我将整数转换为字符串以进行比较,并且对“ \ n”前缀进行了修整从行)。该算法将比较文件中每一行的这些值(每个ID)。如果它们相等,则算法将i加1并使用具有新值i的递归。如果该值不相等,则将其与文件中的下一行进行比较。它会执行此操作,直到它的i值不在文件中,然后返回该值以用作下一条记录的ID。

我的问题是我有一个ID为1,3,2的文件,因为我删除了ID为2的记录,然后创建了一个新记录。这表明该算法可以正常工作,因为它为新记录提供了ID 2(先前已删除)。但是,当我随后创建新记录时,下一个ID为3,导致我的ID列表显示为:1,3,2,3而不是1,3,2,4贝娄是我的算法,带有print()命令的结果我可以看到问题出在哪里,但无法找出原因。有任何想法吗?

算法:

def _getAvailableID(iD):
        i = iD
        f = open(IDFileName,"r")
        lines = f.readlines()
        for line in lines:
            print("%s,%s,%s"%("i=" + str(i), "ID=" + line[:-1], (str(i) == line[:-1])))
            if str(i) == line[:-1]:
                i += 1
                f.close()
                _getAvailableID(i)
        return str(i)

输出:(运行算法时的输出,用于为应该具有4的ID的记录查找适当的ID):

i=1,ID=1,True
i=2,ID=1,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
彼得·德里瓦兹

我认为您的程序失败了,因为您需要更改:

_getAvailableID(i)

 return _getAvailableID(i)

(目前,递归函数找到了正确的答案,该答案已被丢弃。)

但是,最好将您看到的所有ID放在一个集合中,以使程序更高效。

例如在伪代码中:

S = set()
loop over all items and S.add(int(line.rstrip()))
i = 0
while i in S:
   i += 1
return i

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章