, 나는 모든 조합 가능한 가장 빠른 시간에 x, y, z
x in a, y in b and z in c
및 1/x + 1/y + 1/z < 1
을 얻고 싶은 최적화 파이썬 알고리즘
a, b, c = [10,9,8], [9,8,7], [13,5,1]
을 examplewise. 나는
for x, y, z in product(a, b, c):
if predicative(x,y,z):
yield (x, y, z)
는 물론, 이것이 내가 모든 것을 확인하고있어 고려 너무 시간이 오래 걸립니다, 몇 가지 다른 접근을 시도하고 있었고, 목록
a, b, c
이미 분류되어 있습니다.
sum
에서
product(a,b,c)
을 정렬하려고 시도했지만, 모든 제품을 사용하기 때문에 속도가 느립니다.
a, b and c
이 정렬 된 나의 초기 계획은 하나가 실패하자마자 루프에서 빠져 나올 수 있습니다. 어떤 아이디어?
감사합니다. 합니다 (auxillary 목록에서) 가장 높은 1/z
에 대한 이진 검색을 사용 - 조금을 가속화 할 수
['itertools.takewhile'] (https://docs.python.org/2/library/itertools.html#itertools.takewhile)로 생각하십니까? 순수한 파이썬과 동등한 구현은 현재 접근법에 두 줄을 더한 것입니다 ('else : break'). – jonrsharpe
'takewhile will'은 직선적으로 진행되므로 정직하게 작동한다고 생각하지 않습니다. '제품'이 분류되는 방식으로, 나는 쉽게 조합을 놓칠 수있다. 내가 틀렸다면 나를 바로 잡아주세요. – Martol1ni
@ Martol1ni 데이터가 이미 정렬되었으므로 [this] (http://ideone.com/dCMAF3)가 내가 얻을 수있는 최상의 것입니다. – thefourtheye