파이썬 세트 작업의 시간 복잡성?


85

Big O 표기법 에서 파이썬의 각 집합 연산의 시간 복잡성은 무엇입니까 ?

많은 항목에 대한 작업에 Python의 집합 유형 을 사용하고 있습니다. 세트의 크기가 각 작업의 성능에 어떤 영향을 미치는지 알고 싶습니다. 예를 들어를 추가 하고 멤버십을 테스트합니다.

myset = set()
myset.add('foo')
'foo' in myset

인터넷 검색은 리소스를 찾지 못했지만 Python의 집합 구현에 대한 시간 복잡성을 신중하게 고려한 것이 합리적입니다.

이 존재하는 경우, 같은에 대한 링크 좋은 것입니다. 이런 게 없다면 우리가 해결할 수 있을까요?

모든 세트 작업 의 시간 복잡성을 찾기위한 추가 표시 .


2
GWW의 링크는 매우 유익하지만, 파이썬 세트가 단순히 파이썬 사전의 특수한 경우라는 것을 이해함으로써 파이썬 세트의 시간 복잡성을 추론 할 수 있습니다 (키이지만 값은 없음). 따라서 해시 맵에서 작업의 시간 복잡도를 알고 있다면 거의 있습니다.
Wilduck 2011 년

답변:


73

에 따르면 파이썬 위키 : 시간의 복잡성 , 집합 A와 구현 해시 테이블 . 따라서 O (1) 평균 에서 조회 / 삽입 / 삭제를 기대할 수 있습니다 . 해시 테이블의 부하 계수가 너무 높지 않으면 충돌과 O (n)에 직면하게됩니다.

PS는 어떤 이유로 오타처럼 보이는 삭제 작업에 대해 O (n)을 주장합니다.

PPS 이것은 CPython의 경우 사실이며 pypy는 다른 이야기 입니다.


Python으로 설정하면 자동 정렬도 수행됩니다. 그래서 당신은 삽입 생각 하는가 새 값이 여전히 O (1) 시간 복잡도입니다
레쉬 딴

3
@thakurinbox 당신의 진술을 링크로 뒷받침 해 주실 수 있나요?
Sergey Romanovsky

5

작업 in은 컨테이너의 크기와는 독립적이어야합니다. O (1) -최적의 해시 함수가 제공됩니다. 이것은 파이썬 문자열의 경우 거의 사실입니다. 해싱 문자열은 항상 중요하며 Python은 영리해야하므로 거의 최적의 결과를 기대할 수 있습니다.


2

다른 답변은 집합에 대한 두 가지 중요한 작업, 즉 결합과 교차에 대해 이야기하지 않습니다. 최악의 경우, 합집합은 O (n + m)을 사용하는 반면 교차는 O (min (x, y))를 사용하지만 동일한 해시를 가진 집합에 요소가 많지 않은 경우입니다. 일반적인 작업의 시간 복잡성 목록은 https://wiki.python.org/moin/TimeComplexity 에서 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.