Điều gì sau đây là thuật toán của tôi để làm điều này trong những gì tôi tin là thời gian, và bằng chứng của tôi cho điều đó. Giáo sư của tôi không đồng ý rằng nó chạy vào và thay vào đó nghĩ rằng nó chạy trong thời gian. Bất kỳ ý kiến liên quan đến bản thân bằng chứng, hoặc phong cách (nghĩa là ý tưởng của tôi có thể rõ ràng nhưng bản trình bày thì không).
Câu hỏi ban đầu:
Được số, tìm số lớn nhất trong số họ trong thời gian . Bạn không thể giả định bất cứ điều gì khác về.
Câu trả lời của tôi:
- Sắp xếp đầu tiên các phần tử của mảng. Cái này mất thời gian, vì điều này hoàn toàn phụ thuộc vào , không phải .
- Lưu trữ chúng trong một danh sách liên kết (duy trì thứ tự sắp xếp). Điều này cũng mất thời gian, với lý do tương tự như trên.
- Đối với mọi phần tử khác trong mảng, kiểm tra xem nó có lớn hơn phần tử nhỏ nhất của danh sách được liên kết không. Cái này mất thời gian như so sánh phải được thực hiện.
- Nếu số thực tế lớn hơn, sau đó xóa phần tử đầu tiên của danh sách được liên kết (phần thấp nhất) và chèn số mới vào vị trí sẽ giữ danh sách theo thứ tự được sắp xếp. Cái này mất thời gian bởi vì nó được giới hạn bởi một hằng số () ở trên như danh sách không phát triển.
- Do đó, tổng độ phức tạp cho thuật toán là .
Tôi biết rằng việc sử dụng cây đỏ đen trái ngược với danh sách được liên kết sẽ hiệu quả hơn về mặt không đổi (vì giới hạn trên không đổi là như trái ngược với và vấn đề giữ một con trỏ đến phần tử thấp nhất của cây (để tạo điều kiện so sánh) rõ ràng là có thể thực hiện được, nó chỉ không xảy ra với tôi vào thời điểm đó.
Bằng chứng của tôi bị mất là gì? Có cách trình bày chuẩn hơn (ngay cả khi nó không chính xác)?