假设我们有一个带有条目| b-a |的网格{a,b}对于n< = a,b< N和| b-a | > 0.
如何设计所有条目的路径,我在哪里访问b-a的最高值?
当我们越过边界a == b时,问题出现了,因为我需要访问所有条目,并且在那个边界我必须回去。
我的第一个想法如下:
paths = {}
for a in range(n,N-1):
for b in range(a+1,N):
if b-a not in paths:
paths[b-a] = [(a,b)]
else:
paths[b-a] += [(a,b)]
for p in reversed(list(paths.key())):
for q in paths[p]:
visit(q)
问题是这个解决方案为大N带来了太多的内存。我在考虑一个类似的解决方案,它只使用迭代器而不是字典,但是我无法使用迭代器正确地重新构造问题。
有什么建议吗?
//编辑:我为所有感兴趣的人解决了这个问题:
class period_iter:
def __init__(self,t0,t1):
self.t0 = t0
self.t1 = t1
def __iter__(self):
self.i = -1
self.j = 0
return self
def __next__(self):
self.i += 1
if self.i > self.j:
self.i = 0
self.j += 1
if self.j == (self.t1 - self.t0):
raise StopIteration
ti = t0 + self.i
tf = self.t1-(self.j-self.i)
return (ti,tf,tf-ti)