Độ phức tạp của intoá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 intoá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.
Lkhông ngụ ý một danh sách. seqlà lựa chọn phổ biến nhất mà người ta muốn ám chỉ một danh sách. Llà 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.
Lnghĩa là listgì? 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 inphụ thuộc hoàn toàn vào những gì Llà. e in Lsẽ 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.
OrderedDictvà 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ó.
dictvà 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 Bkiểm tra xem Acó ở trong không B.