QN này là từ bài kiểm tra của trường tôi.
Bối cảnh: Trong một trò chơi Hangman, người chơi cố gắng khám phá một từ ẩn bằng cách đoán các chữ cái trong từ. Giả sử tất cả các từ và chữ cái là chữ thường.
Hàm loại bỏ lấy làm đầu vào 2 chuỗi, một chữ cái và một từ và xuất ra từ với tất cả các lần xuất hiện của chữ cái được xóa.
Cung cấp một triển khai lặp lại của chức năng xóa và giải thích ngắn gọn về độ phức tạp về thời gian và không gian của hàm bạn đã viết.
Được đính kèm bên dưới là mã của tôi, giống như giải pháp được cung cấp.
Tuy nhiên, tôi đã bị vấp ngã khi tôi cố gắng giải thích độ phức tạp về thời gian và không gian như O [n] và O [1] tương ứng như câu trả lời được đưa ra là O [n^2] và O [n].
Giải thích được cung cấp bởi giám khảo là:
Độ phức tạp về thời gian: O [n^2] trong đó n là độ dài của chuỗi đầu vào. Điều này là do trong mỗi lần lặp vòng lặp, sự kết hợp chuỗi của new_word sẽ dài hơn cho đến khi nó ở mức tồi tệ nhất, độ dài n.
Độ phức tạp của không gian: O [n], mặc dù không có hoạt động bị trì hoãn hoặc các đối tượng mới được tạo ra mọi lần lặp, chuỗi mới được tạo ra tồi tệ nhất có thể có cùng độ dài với chuỗi ban đầu nếu không có chữ cái nào bị xóa.
Thực hành của tôi là khi tôi giải thích điều gì đó, tôi sẽ có thể vạch ra nó một cách toán học.
Thời gian: Tổng thời gian dành cho mỗi lần lặp hoặc tổng thời gian cho mỗi đệ quy
1] Tôi không hiểu tại sao nối chuỗi đóng góp vào độ phức tạp về thời gian. Đối với các mã đệ quy của nó cắt rõ ràng vì có sự cắt lát chuỗi liên quan [S [0] và S [1:], sự hình thành của S [1:] sẽ lấy O [N-1], O [1] từ S [0] là Không đáng kể] Trong mỗi cuộc gọi đệ quy, tổng thời gian là n+[n-1]+,+1 = o [n^2]. Đối với lời giải thích của lặp đi lặp lại, tôi chỉ cần chấp nhận nó hoặc có một lý thuyết đằng sau lý do tại sao sự kết hợp thêm vào sự phức tạp về thời gian.
Không gian: Tổng không gian được thực hiện cho mỗi đệ quy hoặc tổng không gian được thực hiện cho mỗi lần lặp
2] Ban đầu tôi nghĩ rằng không gian cho đệ quy và lặp lại được tính toán theo cùng một cách. Có đúng không khi chấp nhận rằng để lặp lại, không gian nên được tính là không gian cần thiết cho lần lặp đòi hỏi khắt khe nhất thay vì tổng không gian tích lũy cho tất cả các lần lặp. Yêu cầu nhất sau đó sẽ là khi New_word và Word tương đương.
3] Tôi thực sự chấp nhận thực tế rằng việc lặp lại thường chiếm không gian O [1] và sẽ ném bom mỗi khi tôi có thể. Điều gì thực sự là lý do đằng sau việc coi sự phức tạp không gian của lặp đi lặp lại là O [1] là gì?
Sửa lỗi cho tôi bất cứ lúc nào khi tôi thấy rằng tôi đang ghi nhớ và không hiểu nhiều điều vào thời điểm này.
def remove[letter,word]:
new_word=""
for i in word:
if letter!=i:
new_word+=i
return new_word
Cắt lát là một hoạt động thời gian liên tục. Một tiêu đề lát cắt chứa con trỏ đến mảng, kích thước và công suất bên dưới.
Sự phức tạp về thời gian của Len trong Python là gì?
Chức năng Len [] trong Python có một đặc điểm rất đặc biệt mà người ta thường tự hỏi. Hoàn toàn không mất thời gian và thời gian bằng nhau, trong việc tính độ dài của các cấu trúc dữ liệu có thể lặp lại [chuỗi, mảng, tuple, v.v.], không phân biệt kích thước hay loại dữ liệu. Điều này rõ ràng ngụ ý độ phức tạp thời gian O [1].
Nhà điều hành cắt lát trong Python là gì?
Cắt lát là một hoạt động thời gian liên tục. Một tiêu đề lát cắt chứa con trỏ đến mảng, kích thước và công suất bên dưới.
Sự phức tạp về thời gian của Len trong Python là gì?
Cắt lát là một hoạt động thời gian liên tục. Một tiêu đề lát cắt chứa con trỏ đến mảng, kích thước và công suất bên dưới.
Sự phức tạp về thời gian của Len trong Python là gì?
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 | Trường hợp trung bình | Đã khấu hao trường hợp xấu nhất | Sao chép |
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 |
Sao chép | O [1] | Trên] |
Nối [1] | Trên] | Trên] |
Nối [1] | O [1] | Trên] |
Đặt mục [1] | O [1] | Trên] |
Xóa mục | O [1] | Trên] |
Xóa mục | Trên] | Trên] |
Xóa mục
Lặp lại [3]
Ghi chúk 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.
[1] = Các hoạt động này dựa vào phần "khấu hao" của "trường hợp xấu nhất được khấu hao". Các hành động cá nhân 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 container.