【发布时间】:2021-02-18 17:34:22
【问题描述】:
我正在做一个问题,n 个人站在一条线上,每个人都知道自己的位置和速度。我被要求找到让所有人去任何地点的最短时间。
基本上,我正在做的是使用二分搜索找到最短时间,并让每个 ith 人在该时间间隔内走的最远距离。如果所有的间隔都重叠,那么就有一个每个人都可以去的地方。
我有这个问题的解决方案,但是我的错误解决方案超出了时间限制,无法找到间隔。我当前的解决方案运行速度太慢,我希望得到更好的解决方案。
我的代码:
people = int(input())
peoplel = [list(map(int, input().split())) for _ in range(people)] # first item in people[i] is the position of each person, the second item is the speed of each person
def good(time):
return checkoverlap([[i[0] - time *i[1], i[0] + time * i[1]] for i in peoplel])
# first item,second item = the range of distance a person can go to
def checkoverlap(l):
for i in range(len(l) - 1):
seg1 = l[i]
for i1 in range(i + 1, len(l)):
seg2 = l[i1]
if seg2[0] <= seg1[0] <= seg2[1] or seg1[0] <= seg2[0] <= seg1[1]:
continue
elif seg2[0] <= seg1[1] <= seg2[1] or seg1[0] <= seg2[1] <= seg1[1]:
continue
return False
return True
(这是我第一次问问题,所以请告诉我有什么问题)
【问题讨论】:
-
如果每个人在不同时间到达现场怎么办?
-
@btilly 说的不够清楚,interval是一个人在那个时间段可以走的距离范围,时间是每个人到达那个点的最短时间。所以,如果所有的时间间隔都重叠,那么每个人都可以在步行 x 次后到达那个地方,那么我只是搜索每个人可以去那个地方的最短时间。
-
我建议您尝试使用en.wikipedia.org/wiki/Simplex_algorithm。您的线性不等式是每个人都可以达到某个时间点。您正在尝试优化时间。
-
为什么这么复杂?它似乎更像是算法的任务。 LP 可能有点矫枉过正。
标签: python-3.x algorithm performance optimization intervals