일부 개체 목록을 가지고 있으며 다음 함수에서 반환 한 특정 번호에 대해 특정 순서로 반복하고 싶습니다. 다음은 해시 번호의 모듈을 기반으로 각 숫자를 목록 크기로 제거하고 시퀀스를 생성합니다.이 알고리즘을 최적화 할 수 있습니까?
def genSeq(hash,n):
l = range(n)
seq = []
while l:
ind = hash % len(l)
seq.append(l[ind])
del l[ind]
return seq
예 : 나는 쉽게 이해 파이썬에서 너 한테을 제시하고 [3, 1, 4, 2, 0]
genSeq (53,5)을 반환합니다. 나는 C++로 코딩해야한다. O (n^2)에서이 형식의 복잡성은 vector와 list 둘 다에 있습니다. (우리는 제거 또는 액세스 비용을 지불합니다). 이게 더 나아질 수 있을까요?
'l'에 적절한 데이터 구조를 사용하면 이론적으로'log n' 성능이 가능합니다. 그러면'n log n'이 될 것입니다. 그럼에도 불구하고 당신의'n'이 정말로 크지 않으면이 성능 향상이 크지 않을지 의심 스럽습니다. – Howard
그래서, n 개의 숫자를 섞어 버리시겠습니까? – Zonko
어느 데이터 구조가 적합할까요? 로그 n은 어떻게됩니까? – balki