특정 제약 조건에 따라 최적의 미디어 선택을 찾아야합니다. 나는 4 중첩 된 for 루프에서 그것을하고 있으며, 약 O (n^4) 회 반복이 걸릴 것이므로 느리다. 나는 그것을 더 빨리 만들려고했지만 아직도 느리다. 내 변수는 2 ~ 3 만개 정도 될 수 있습니다.Python : 느린 중첩 for 루프
max_disks = 5
max_ssds = 5
max_tapes = 1
max_BR = 1
allocations = []
for i in range(max_disks):
for j in range(max_ssds):
for k in range(max_tapes):
for l in range(max_BR):
allocations.append((i,j,k,l)) # this is just for example. In actual program, I do processing here, like checking for bandwidth and cost constraints, and choosing the allocation based on that.
그것은 최대 각 미디어 유형의 수백 둔화되지하지만 수천 느려질 것 :
여기에 내가 뭘하려고 오전의 작은 예입니다. 내가 시도
다른 방법은 : 그것은 심지어 작은 숫자 느린
max_disks = 5
max_ssds = 5
max_tapes = 1
max_BR = 1
allocations = [(i,j,k,l) for i in range(max_disks) for j in range(max_ssds) for k in range(max_tapes) for l in range(max_BR)]
이 방법.
두 질문 : 두 번째는 적은 수의 느린 이유
- ?
- 큰 숫자 (수천)에 대해 내 프로그램을 작동 시키려면 어떻게해야합니까? 여기
그것은이 숫자로 마무리 19.8 초 밖에 걸리지 itertools.product
max_disks = 500
max_ssds = 100
max_tapes = 100
max_BR = 100
# allocations = []
for i, j, k,l in itertools.product(range(max_disks),range(max_ssds),range(max_tapes),range(max_BR)):
pass
와 버전입니다.
목록 이해가있는 첫 번째 예는 두 번째 예보다 * 빠름 *입니다. 그것들은 다른 점은 같지만'allocations.append' 속성 룩업과 후속 메서드 호출은 중첩 된 루프를 느리게 만듭니다. 대신에 여기에서'itertools.product()'를보고 대신 모든 가능한 조합으로 거대한리스트 객체를 생성하는 것을 피하고 싶다. –
itertools.product()도 시도했습니다. 그러나 그것도 수천 번은 효과가 없었습니다. – Pretty
할당 목록 작성을 고집합니까? 작성중인 목록의 일반 구조를 이미 알고 있으므로 개별적으로 할당을 처리 할 수 없습니까? –