Hướng dẫn what is the time complexity of pop from a list in python? - độ phức tạp về thời gian của cửa sổ bật lên từ danh sách trong python là bao nhiêu?

Nếu bạn đang học Python sau JavaScript là ngôn ngữ đầu tiên của bạn. Bạn có thể sẽ bị khóa bởi các chức năng sẵn có mà chúng ta có trong Python.

Trong khi xóa bất kỳ yếu tố nào khỏi danh sách, chúng tôi nên quan tâm đến sự phức tạp và chúng tôi có chức năng pop () bật phần tử từ danh sách trên chỉ mục được cung cấp. Nó có quan tâm đến sự phức tạp về thời gian không?

Hãy xem xét chúng tôi có danh sách sau.

a = [1, 2, 3, 4, 5, 6]

Bằng cách thực hiện a.pop() không có đối số, nó sẽ xóa và trả về phần tử cuối cùng có độ phức tạp thời gian O (1). Bởi vì nó chỉ loại bỏ phần tử cuối cùng và không cần phải sắp xếp lại các phần tử.

Danh sách Python được thực hiện như một mảng của con trỏ. Nếu chúng ta thực hiện xóa và trả lại k'th và sau đó di chuyển tất cả các yếu tố sau khi k lên một vị trí. Để chúng tôi không có giá trị

a.pop(k)
0 ở vị trí
a.pop(k)
1.

Vì vậy, điều gì sẽ là sự phức tạp về thời gian khi chúng ta vượt qua một cuộc tranh luận? Hãy xem xét độ dài của danh sách là

a.pop(k)
2 và chúng ta cần loại bỏ một phần tử tại
a.pop(k)
3 phương pháp như sau.

a.pop(k)

Công thức chung cho độ phức tạp thời gian này sẽ là:general formula for this time complexity will be:

O(N-k)

Độ phức tạp thời gian tồi tệ nhất sẽ là: time complexity will be:


# when we have to remove the first element
O(N)
# if we consider list we have above
a = [1, 2, 3, 4, 5, 6]
O(6-0) = O(6) = O(N)

Độ phức tạp thời gian trường hợp trung bình sẽ là: time complexity will be:

O(k) or O(N/2)

Vì chúng tôi có sáu yếu tố trong danh sách và loại bỏ phần tử giữa của danh sách là

a.pop(k)
4 sẽ có các hoạt động k. Vì vậy, đơn giản là chúng ta sẽ có độ phức tạp thời gian
a.pop(k)
6average.

Nhìn vào sự phức tạp, chúng ta không nên sử dụng

a.pop(k)
7 để quản lý hàng đợi. Thay vào đó chúng tôi có
a.pop(k)
8in Python.

Hạnh phúc mã hóa cho đến lúc đó!

Một nghiên cứu thực nghiệm trên danh sách Python.POP Độ phức tạp

Hướng dẫn what is the time complexity of pop from a list in python? - độ phức tạp về thời gian của cửa sổ bật lên từ danh sách trong python là bao nhiêu?

Đây là lý do tại sao bạn nên sử dụng Collection.deque làm hàng đợi, nhưng không phải liệt kê.

TL;DR

  • Python list.pop (k) có độ phức tạp về thời gian của O (k).
  • Hãy thận trọng khi sử dụng Python
    a.pop(k)
    9 làm cấu trúc hàng đợi. Sử dụng
    O(N-k)
    0 thay thế.
  • Luôn hồ sơ mã của bạn để tối ưu hóa.

Liệt kê là hàng đợi

Hàng đợi là cấu trúc dữ liệu đầu tiên (FIFO) đầu tiên. Thuộc tính cơ bản này làm cho hàng đợi hữu ích trong một loạt các ứng dụng, chẳng hạn như tổ chức các đối tượng theo thứ tự và phục vụ như là bộ đệm giao tiếp giữa các luồng.

Hàng đợi chỉ là một loại dữ liệu trừu tượng và các ngôn ngữ khác nhau có các dụng cụ riêng. Trong Python, hàng đợi FIFO thích hợp là

O(N-k)
0, cung cấp các chức năng
O(N-k)
2 và
O(N-k)
3 để đẩy một phần tử vào cuối và bật phần tử lâu đời nhất từ ​​phía trước, tương ứng. Tuy nhiên, vì Python
O(N-k)
4 có mức phơi nhiễm tốt hơn nhiều và cũng cung cấp các hàm
O(N-k)
5 và
O(N-k)
6,
O(N-k)
4 có lẽ thường được sử dụng như một hàng đợi.However, since the Python
O(N-k)
4 has a much better exposures and also provides
O(N-k)
5 and
O(N-k)
6 functions,
O(N-k)
4 is probably more frequently used as a Queue.

Vì vậy, mối quan tâm với việc sử dụng

a.pop(k)
9 làm hàng đợi là gì? Đặc biệt, chúng ta có nên sử dụng
O(N-k)
9 để bật yếu tố lâu đời nhất từ ​​hàng đợi không?

Đây là giao diện của


# when we have to remove the first element
O(N)
# if we consider list we have above
a = [1, 2, 3, 4, 5, 6]
O(6-0) = O(6) = O(N)
0 được xác định trong Python


# when we have to remove the first element
O(N)
# if we consider list we have above
a = [1, 2, 3, 4, 5, 6]
O(6-0) = O(6) = O(N)
1([i])

Loại bỏ mục tại vị trí đã cho trong danh sách và trả về nó. Nếu không có chỉ mục được chỉ định, a.pop() sẽ xóa và trả về mục cuối cùng trong danh sách.

Cơ chế cơ bản và độ phức tạp thời gian không được đề cập. Nhưng tài liệu thực sự ủng hộ việc sử dụng

a.pop(k)
9 làm hàng đợi

Để thực hiện hàng đợi, hãy sử dụng


# when we have to remove the first element
O(N)
# if we consider list we have above
a = [1, 2, 3, 4, 5, 6]
O(6-0) = O(6) = O(N)
4 được thiết kế để có sự thay đổi nhanh chóng và bật từ cả hai đầu.

Về cơ bản, một Python

a.pop(k)
9 được triển khai như một loạt các con trỏ.

# when we have to remove the first element
O(N)
# if we consider list we have above
a = [1, 2, 3, 4, 5, 6]
O(6-0) = O(6) = O(N)
6 đầu tiên loại bỏ và trả về phần tử tại k, sau đó di chuyển tất cả các phần tử ngoài k một vị trí lên.

Một nghiên cứu thực nghiệm thông qua hồ sơ

Dưới đây là một ví dụ demo về việc sử dụng hàng đợi để theo thứ tự ngang hàng (tạo) một cây. Chúng tôi tạo ra một cây nhị phân ngẫu nhiên với tối đa 10.000 nút.

Mã mẫu để tạo cây nhị phân với hàng đợi.

Ở dòng 19 và 21, chúng tôi đang sử dụng

O(N-k)
0 để thực hiện các đường truyền đơn đặt hàng của cây nhị phân ngẫu nhiên của chúng tôi. Các kết quả hồ sơ được hiển thị trong hình khi bắt đầu bài viết này.

Bạn có thể hình ảnh những gì xảy ra nếu chúng ta sử dụng danh sách thay thế không? Thay đổi dòng 19 và 21 thành:

line 19:    queue = list([root])
line 21: cur = queue.pop(0)

Và đây là kết quả hồ sơ. Hoạt động

O(k) or O(N/2)
0 chậm hơn gần 1000 lần so với
O(k) or O(N/2)
1. Do đó, toàn bộ chương trình kết thúc với hai lần thời gian. Đây là sự khác biệt giữa hàm phức tạp thời gian O (1) V.S. O (n) một.

Hướng dẫn what is the time complexity of pop from a list in python? - độ phức tạp về thời gian của cửa sổ bật lên từ danh sách trong python là bao nhiêu?

Python danh sách.pop (0) cực kỳ chậm cho một danh sách lớn.

Sự phức tạp về thời gian của Pop trong Python là gì?

danh sách
Hoạt động
Trường hợp trung bình
Đã khấu hao trường hợp xấu nhất
Trung cấp pop [2]
O(n)
O(n)
Chèn
O(n)
O(n)
Nhận mục
O(1)
O(1)
Thiết lập các mục
O(1)
O(1)
Timecomplexity - Python wikiwiki.python.org

Pop có chậm trong Python không?

Danh sách Python.Pop (0) cực kỳ chậm cho một danh sách lớn.extremely slow for a large list.

Bạn có thể xuất hiện từ một danh sách trong Python?

Danh sách Pop trong Python là một hàm được xác định trước, được xây dựng, loại bỏ một mục tại chỉ mục được chỉ định khỏi danh sách.Bạn cũng có thể sử dụng Pop trong Python mà không đề cập đến giá trị chỉ mục.Trong các trường hợp như vậy, hàm pop () sẽ loại bỏ phần tử cuối cùng của danh sách.. You can also use pop in Python without mentioning the index value. In such cases, the pop() function will remove the last element of the list.

Độ phức tạp của thời gian của hoạt động pop () trên ngăn xếp là gì?

Buồn một phần tử từ một ngăn xếp sẽ mất độ phức tạp thời gian O (1).O(1) time complexity.