Khi mọi người nói các bộ có kiểm tra thành viên O (1), họ đang nói về trường hợp trung bình . Trong trường hợp xấu nhất (khi tất cả các giá trị băm va chạm) kiểm tra tư cách thành viên là O (n). Xem wiki Python về độ phức tạp thời gian .
Các bài viết trên Wikipedia nói rằng trường hợp tốt nhất độ phức tạp thời gian cho một bảng băm mà không thay đổi kích thước là O(1 + k/n)
. Kết quả này không áp dụng trực tiếp cho các bộ Python vì các bộ Python sử dụng bảng băm thay đổi kích thước.
Một chút nữa trên bài viết Wikipedia nói rằng đối với trường hợp trung bình , và giả sử một hàm băm thống nhất đơn giản, độ phức tạp thời gian là O(1/(1-k/n))
, nơi k/n
có thể được giới hạn bởi một hằng số c<1
.
Big-O chỉ đề cập đến hành vi tiệm cận là n →. Vì k / n có thể được giới hạn bởi một hằng số, c <1, không phụ thuộc vào n ,
O(1/(1-k/n))
không lớn hơn O(1/(1-c))
tương đương với O(constant)
= O(1)
.
Vì vậy, giả sử trung bình băm đơn giản, trung bình , kiểm tra tư cách thành viên cho các bộ Python là O(1)
.
set
triển khai ban đầu thực sự làdict
với các giá trị giả và nó đã được tối ưu hóa sau đó.