Hướng dẫn what is the time complexity of python slice? - độ phức tạp thời gian của lát trăn là gì?

Giả sử tôi có một số danh sách python, my_list có chứa n phần tử. Các phần tử đơn có thể được lập chỉ mục bằng cách sử dụng my_list[i_1], trong đó i_1 là chỉ số của phần tử mong muốn. Tuy nhiên, danh sách Python cũng có thể được lập chỉ mục my_list[i_1:i_2] trong đó một "lát" của danh sách từ i_1 đến i_2 là mong muốn. Ký hiệu lớn (trường hợp xấu nhất) để cắt một danh sách kích thước n là gì?

Cá nhân, nếu tôi mã hóa "máy cắt", tôi sẽ lặp lại từ i_1 đến i_2, tạo một danh sách mới và trả lại nó, ngụ ý O (n), đây có phải là Python làm thế nào không?

Cảm ơn bạn,

Đã hỏi ngày 2 tháng 11 năm 2012 lúc 21:59Nov 2, 2012 at 21:59

Hướng dẫn what is the time complexity of python slice? - độ phức tạp thời gian của lát trăn là gì?

0

Nhận một lát là O (____ 8). Điều này là do đại diện nội bộ của Python trong danh sách là một mảng, vì vậy bạn có thể bắt đầu tại i_1 và lặp lại đến i_2.

Để biết thêm thông tin, hãy xem mục Wiki phức tạp về thời gian Python

Bạn cũng có thể xem xét việc triển khai trong nguồn cpython nếu bạn muốn.

Đã trả lời ngày 2 tháng 11 năm 2012 lúc 22:01Nov 2, 2012 at 22:01

Sam Mussmannsam MussmannSam Mussmann

5,8132 Huy hiệu vàng28 Huy hiệu bạc43 Huy hiệu đồng2 gold badges28 silver badges43 bronze badges

2

Đối với một danh sách kích thước N và một lát có kích thước M, phép lặp thực sự chỉ là O (M), không phải O (N). Vì m thường là

Trong thực tế, nếu bạn nghĩ về lời giải thích của bạn, bạn có thể thấy tại sao. Bạn chỉ lặp lại từ I_1 đến I_2, không phải từ 0 đến I_1, sau đó I_1 đến I_2.

Đã trả lời ngày 2 tháng 11 năm 2012 lúc 22:01Nov 2, 2012 at 22:01

Sam Mussmannsam Mussmannabarnert

5,8132 Huy hiệu vàng28 Huy hiệu bạc43 Huy hiệu đồng45 gold badges578 silver badges655 bronze badges

Hướng dẫn what is the time complexity of python slice? - độ phức tạp thời gian của lát trăn là gì?

cấp độ 1

O (n) trong đó n là chiều dài của lát cắt. Cắt lát chỉ là "bản sao một phần của danh sách" để độ phức tạp thời gian giống như bản sao.

cấp độ 2

Vì vậy, nếu tôi muốn cắt một mảng trong vòng một thời gian, thì điều gì sẽ là một cách tối ưu để làm điều đó để tôi vẫn có thể giữ thuật toán ở độ phức tạp thời gian O (n)?

cấp độ 1

O (n) trong đó n là chiều dài của lát cắt. Cắt lát chỉ là "bản sao một phần của danh sách" để độ phức tạp thời gian giống như bản sao.

cấp độ 1

O (n) trong đó n là chiều dài của lát cắt. Cắt lát chỉ là "bản sao một phần của danh sách" để độ phức tạp thời gian giống như bản sao.

Trang này ghi lại sự phức tạp về thời gian (hay 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 phát triển cũ hơn hoặc vẫn còn dưới của CPython) có thể có các đặc điểm hiệu suất hơi khác nhau. Tuy nhiên, nhìn chung là an toàn khi cho rằng chúng không chậm hơn so với hệ số O (log n).

Nói chung, 'n' là số lượng các yếu tố hiện tại trong container. 'K' là giá trị của một tham số hoặc số lượng phần tử trong tham số.

danh sách

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

Trong nội bộ, một danh sách được biểu diễn dưới dạng một mảng; Các chi phí lớn nhất đến từ việc tăng vượt quá quy mô phân bổ hiện tại (vì mọi thứ phải di chuyển) hoặc từ việc chèn hoặc xóa ở đâu đó gần đầu (vì mọi thứ sau đó phải di chuyển). Nếu bạn cần thêm/xóa ở cả hai đầu, hãy xem xét sử dụng một bộ sưu tập.Deque thay thế.

Hoạt động

Trường hợp trung bình

Đã khấu hao trường hợp xấu nhất

Sao chép

Trên)

Trên)

Nối [1]

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

Trên)

Trên)

Nối [1]

Trên)

Trên)

Nối [1]

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

Trên)

Trên)

Nối [1]

Trên)

Trên)

Nối [1]

O (1)

O (1)

Pop cuối cùng

Trên)

Trên)

Nối [1]

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

Trung cấp pop [2]

Trung cấp pop [2]

Chèn

Nhận mục

Nhận mục

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

Trên)

Nối [1]

Trên)

Nối [1]

O (1)

O (1)

collections.deque

Pop cuối cùng

Hoạt động

Trường hợp trung bình

Đã khấu hao trường hợp xấu nhất

Sao chép

Trên)

Trên)

Nối [1]

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

O (1)

O (1)

Pop cuối cùng

Trên)

Trên)

Nối [1]

O (1)

Hoạt động

Pop cuối cùng

Trung cấp pop [2]

Chèn

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

O (1)

Trên)

Nối [1]

O(len(s)+len(t))

O (1)

Pop cuối cùng

Trung cấp pop [2]

Chèn

Nhận mục

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

Xóa mục

Lặp đi lặp lại

Nhận lát

Được)

Del lát

Lặp đi lặp lại

Trung cấp pop [2]

Chèn

Được)

Del lát

  • Đặt lát

  • O (k+n)

Mở rộng [1]

Loại

O (n log n)

Hoạt động

Trường hợp trung bình

Đã khấu hao trường hợp xấu nhất

nhân

O (1)

Trên)

Nối [1]

Trên)

Trên)

Nối [1]

O (1)

Trên)

Pop cuối cùng

O (1)

Trên)

Pop cuối cùng

O (1)

Trên)

Pop cuối cùng

Trên)

Trên)

Trung cấp pop [2]

Chèn

Nhận mụck from a list of size n shifts all elements after k by one slot to the left using memmove. n - k elements have to be moved, so the operation is O(n - k). The best case is popping the second to last element, which necessitates one move, the worst case is popping the first element, which involves n - 1 moves. The average case for an average value of k is popping the element the middle of the list, which takes O(n/2) = O(n) operations.

[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à container từng đạt được, thay vì chỉ kích thước hiện tại. Ví dụ: nếu các đối tượng N được thêm vào từ điển, thì N-1 sẽ bị xóa, từ điển vẫn sẽ được kích thước cho các đối tượng N (ít nhất) cho đến khi một lần chèn khác được thực hiện.

Sự phức tạp về thời gian của lát cắt 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
Lặp đi lặp lại
O(n)
O(n)
Nhận lát
O(k)
O(k)
Del lát
O(n)
O(n)
Đặt lát
O(k+n)
O(k+n)
Timecomplexity - Python wikiwiki.python.org

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

Cắt lát chỉ là một phần sao chép của danh sách, vì vậy độ phức tạp của thời gian giống như bản sao.O (n+k) là trường hợp trung bình, bao gồm phải phát triển hoặc thu nhỏ danh sách để điều chỉnh số lượng các phần tử được chèn để thay thế lát cắt ban đầu.O(n+k) is the average case, which includes having to grow or shrink the list to adjust for the number of elements inserted to replace the original slice.

Sự phức tạp về thời gian và không gian của việc cắt trong Python là bao nhiêu?

Mỗi hoạt động lát cắt về cơ bản lên tới một hoạt động sao chép O (N) nguyên thủy.Vì chỉ các tài liệu tham khảo được sao chép, kích thước hoặc loại yếu tố không quan trọng.Tổng cộng, độ phức tạp thời gian lên tới O (NK). Độ phức tạp không gian chỉ là O (N), vì các lát tạm thời có thể lấy lại ngay lập tức.time complexity amounts to O(nk). Space complexity is only O(n), since the temporary slices are reclaimable immediately.

Có phải lát cắt python thời gian không đổi?

Xây dựng một lát cắt là một phần của N mất thời gian O (N).Trong bài viết liên quan này, ký hiệu Python được giải thích.Bạn cũng có thể xem xét tài liệu Python về sự phức tạp về thời gian.Vì vậy, câu trả lời là không nói chung, chỉ đối với một lát kích thước không đổi, nó có thể là thời gian không đổi.only for a constant size slice it can be constant time.