Độ phức tạp của thời gian tham gia python

Trang này ghi lại độ phức tạp về thời gian [còn gọi là "Big O" hoặc "Big Oh"] của các hoạt động khác nhau trong CPython hiện tại. Các triển khai Python khác [hoặc các phiên bản CPython cũ hơn hoặc vẫn đang được phát triển] có thể có các đặc điểm hiệu suất hơi khác một chút. Tuy nhiên, nhìn chung có thể an toàn khi cho rằng chúng không chậm hơn hệ số O[log n]

Nói chung, 'n' là số phần tử hiện có trong vùng chứa. 'k' là giá trị của tham số hoặc số phần tử trong tham số

Trường hợp trung bình giả định các tham số được tạo đồng đều một cách ngẫu nhiên

Bên trong, một danh sách được biểu diễn dưới dạng một mảng; . Nếu bạn cần thêm/xóa ở cả hai đầu, hãy cân nhắc sử dụng bộ sưu tập. deque thay vì

Hoạt động

trường hợp trung bình

Trường hợp xấu nhất được khấu hao

Sao chép

Trên]

Trên]

Nối[1]

Ô[1]

Ô[1]

Pop cuối cùng

Ô[1]

Ô[1]

Pop trung gian[2]

Trên]

Trên]

Chèn

Trên]

Trên]

Nhận vật phẩm

Ô[1]

Ô[1]

Thiết lập các mục

Ô[1]

Ô[1]

Xóa mục

Trên]

Trên]

lặp lại

Trên]

Trên]

Nhận lát

Vâng]

Vâng]

Del Slice

Trên]

Trên]

Đặt lát cắt

O[k+n]

O[k+n]

Gia hạn[1]

Vâng]

Vâng]

Loại

O[n log n]

O[n log n]

nhân

O[n]

O[n]

x tính bằng giây

Trên]

tối thiểu [s], tối đa [s]

Trên]

Nhận chiều dài

Ô[1]

Ô[1]

Một deque [hàng đợi hai đầu] được biểu diễn bên trong dưới dạng danh sách liên kết kép. [Chà, một danh sách các mảng chứ không phải các đối tượng, để đạt hiệu quả cao hơn. ] Cả hai đầu đều có thể truy cập được, nhưng nhìn vào giữa còn chậm, thêm bớt vào giữa còn chậm hơn

Hoạt động

trường hợp trung bình

Trường hợp xấu nhất được khấu hao

Sao chép

Trên]

Trên]

nối thêm

Ô[1]

Ô[1]

appendleft

Ô[1]

Ô[1]

nhạc pop

Ô[1]

Ô[1]

popleft

Ô[1]

Ô[1]

gia hạn

Vâng]

Vâng]

mở rộng trái

Vâng]

Vâng]

quay

Vâng]

Vâng]

gỡ bỏ

Trên]

Trên]

Nhận chiều dài

Ô[1]

Ô[1]

Xem dict - việc triển khai có chủ ý rất giống nhau

Hoạt động

trường hợp trung bình

Trường hợp xấu nhất

ghi chú

x tính bằng giây

Ô[1]

Trên]

công đoàn. t

O[len[s]+len[t]]

ngã tư

O[min[len[s], len[t]]]

O[len[s] * len[t]]

thay thế "tối thiểu" bằng "tối đa" nếu t không phải là tập hợp

Nhiều giao lộ s1&s2&. &sn

[n-1]*O[l] trong đó l là max[len[s1],. ,len[sn]]

sự khác biệt s-t

O[len[s]]

s. Difference_update[t]

O[len[t]]

Sự khác biệt đối xứng s^t

O[len[s]]

O[len[s] * len[t]]

s. symmetric_difference_update[t]

O[len[t]]

O[len[t] * len[s]]

  • Như đã thấy trong mã nguồn, độ phức tạp của chênh lệch cài đặt s-t hoặc s. sự khác biệt [t] [set_difference[]] và sự khác biệt được đặt tại chỗ s. khác biệt_update[t] [set_difference_update_internal[]] khác nhau. Cái đầu tiên là O[len[s]] [đối với mọi phần tử trong s, hãy thêm nó vào tập hợp mới, nếu không có trong t]. Cái thứ hai là O[len[t]] [đối với mọi phần tử trong t hãy xóa nó khỏi s]. Vì vậy, phải cẩn thận xem cái nào được ưu tiên hơn, tùy thuộc vào bộ nào dài nhất và liệu có cần một bộ mới hay không

  • Để thực hiện các hoạt động thiết lập như s-t, cả s và t cần phải được thiết lập. Tuy nhiên, bạn có thể thực hiện phương thức tương đương ngay cả khi t là bất kỳ lần lặp nào, ví dụ: s. khác biệt [l], trong đó l là một danh sách

Thời gian trường hợp trung bình được liệt kê cho các đối tượng dict giả định rằng hàm băm cho các đối tượng đủ mạnh để không xảy ra va chạm. Trường hợp trung bình giả định rằng các khóa được sử dụng trong tham số được chọn ngẫu nhiên thống nhất từ ​​tập hợp tất cả các khóa

Lưu ý rằng có một đường dẫn nhanh cho các ký tự [trong thực tế] chỉ xử lý các phím str; . một chương trình điển hình kết thúc nhanh như thế nào

Hoạt động

trường hợp trung bình

Trường hợp xấu nhất được khấu hao

Tốt bụng

Ô[1]

Trên]

Sao chép[3]

Trên]

Trên]

Nhận vật phẩm

Ô[1]

Trên]

Đặt Mục[1]

Ô[1]

Trên]

Xóa mục

Ô[1]

Trên]

Lặp lại[3]

Trên]

Trên]

[1] = Các hoạt động này dựa trên phần "Được khấu hao" của "Trường hợp xấu nhất được khấu hao". Các hành động riêng lẻ có thể mất nhiều thời gian đáng ngạc nhiên, tùy thuộc vào lịch sử của vùng chứa

[2] = Lấy phần tử trung gian tại chỉ mục k từ danh sách kích thước n sẽ dịch chuyển tất cả các phần tử sau k sang trái một vị trí bằng cách sử dụng memmove. n - k phần tử phải được di chuyển, vì vậy phép toán là O[n - k]. Trường hợp tốt nhất là bật phần tử thứ hai đến phần tử cuối cùng, cần một lần di chuyển, trường hợp xấu nhất là bật phần tử đầu tiên, bao gồm n - 1 lần di chuyển. Trường hợp trung bình cho giá trị trung bình của k là bật phần tử ở giữa danh sách, thực hiện các phép toán O[n/2] = O[n]

[3] = Đối với các hoạt động này, trường hợp xấu nhất n là kích thước tối đa mà vùng chứa từng đạt được, thay vì chỉ kích thước hiện tại. Ví dụ: nếu N đối tượng được thêm vào từ điển, sau đó N-1 bị xóa, từ điển sẽ vẫn có kích thước cho N đối tượng [ít nhất] cho đến khi một lần chèn khác được thực hiện

Tham gia có nhanh hơn Python nối không?

Nối các chuỗi nhanh hơn thêm nhưng chỉ khi nối 3+ chuỗi - Trợ giúp về Python - Thảo luận về Python. tổ chức.

Tại sao lại là. tham gia nhanh hơn?

Tôi sẽ không để bạn phải hồi hộp, giữa Liên kết và Truy vấn con, các liên kết có xu hướng thực thi nhanh hơn. Trên thực tế, thời gian truy xuất truy vấn sử dụng liên kết hầu như luôn tốt hơn thời gian truy xuất sử dụng truy vấn con. Lý do là tham gia giảm thiểu gánh nặng xử lý trên cơ sở dữ liệu bằng cách thay thế nhiều truy vấn bằng một truy vấn tham gia .

Là nối nhanh hơn tham gia?

Thực hiện N phép nối yêu cầu tạo N chuỗi mới trong quá trình này. Mặt khác, join[] , chỉ phải tạo một chuỗi duy nhất [kết quả cuối cùng] và do đó hoạt động nhanh hơn nhiều .

Độ phức tạp thời gian của Python tách là gì?

Đây là vòng lặp để tách theo khoảng trắng. Nguồn cho các bước dải qua từng ký tự trong chuỗi. Điều này mang lại cho dải độ phức tạp về thời gian là O[n] .

Chủ Đề