Độ phức tạp của in
toán tử trong Python là gì? Nó có phải là theta (n) không?
Có giống như sau không?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
là một danh sách.
Độ phức tạp của in
toán tử trong Python là gì? Nó có phải là theta (n) không?
Có giống như sau không?
def find(L, x):
for e in L:
if e == x:
return True
return False
L
là một danh sách.
L
không ngụ ý một danh sách. seq
là lựa chọn phổ biến nhất mà người ta muốn ám chỉ một danh sách. L
là một tên biến khủng khiếp. Những chữ cái đơn là xấu, và viết hoa ngụ ý đó là một đẳng cấp. Ngay cả khi nó là một cái gì đó cụ thể, Python là động, vì vậy hãy nói rõ nó trong trường hợp như thế này.
L
nghĩa là list
gì? Libtelepathy.so của tôi có lẽ đã lỗi thời.
list
Câu trả lời:
Sự phức tạp của in
phụ thuộc hoàn toàn vào những gì L
là. e in L
sẽ trở thành L.__contains__(e)
.
Xem tài liệu về độ phức tạp thời gian này để biết độ phức tạp của một số kiểu cài sẵn.
Đây là bản tóm tắt cho in
:
Trường hợp xấu nhất O (n) đối với tập hợp và tập hợp là rất hiếm gặp, nhưng nó có thể xảy ra nếu __hash__
được thực hiện kém. Điều này chỉ xảy ra nếu mọi thứ trong tập hợp của bạn có cùng giá trị băm.
OrderedDict
và như bạn có thể tìm hiểu: OrderedDict
được kế thừa từ đó dict
, vì vậy hầu hết các hoạt động (tất nhiên, có ngoại lệ) đều có cùng độ phức tạp .
Nó phụ thuộc hoàn toàn vào loại vật chứa. Các vùng chứa băm ( dict
, set
) sử dụng hàm băm và về cơ bản là O (1). Các chuỗi điển hình ( list
, tuple
) được thực hiện như bạn đoán và là O (n). Cây sẽ là trung bình O (log n). Và như thế. Mỗi loại này sẽ có một __contains__
phương pháp thích hợp với đặc điểm big-O của nó.
dict
và set
(cũng như các loại dữ liệu tiềm năng khác)
Nó phụ thuộc vào vùng chứa bạn đang thử nghiệm. Đó thường là những gì bạn mong đợi - tuyến tính đối với các cấu trúc dữ liệu có thứ tự, không đổi đối với không có thứ tự. Tất nhiên, có cả hai loại (có thứ tự hoặc không có thứ tự) có thể được hỗ trợ bởi một số biến thể của cây.
A in B
kiểm tra xem A
có ở trong không B
.