Từ nhận xét của bạn, có vẻ như bạn đang nhầm lẫn về ý nghĩa của giới hạn dưới, giới hạn trên và ký hiệu tiệm cận. Ví dụ, hãy chọn Sắp xếp chèn. Hợp tốt nhất của mình thời gian chạy là Θ ( n ) (điều này xảy ra khi đầu vào đã được sắp xếp). Hợp tồi tệ nhất thời gian chạy là Θ ( n2) (điều này xảy ra khi đầu vào là để sắp xếp ngược lại). Vì vậy, vì thời gian chạy nằm giữa hàm tuyến tính của n và hàm bậc hai của , bạn có thể nói rằng thời gian chạy của Sắp xếp chèn là cả và . Điều quan trọng là phải hiểu trong trường hợp này mà bạn không thểnΩ ( n )Ô ( n2)Ω ( n 2 ) O ( n )nói rằng thời gian chạy là . Tại sao? Bởi vì tồn tại một đầu vào làm cho thuật toán chạy trong . Tuy nhiên, bạn có thể nói rằng thời gian chạy trong trường hợp xấu nhất là , một lần nữa vì tồn tại một đầu vào khiến thuật toán chạy trong . Mặc dù vậy, chúng tôi thường sử dụng ký hiệu cho trường hợp xấu nhất, vì chúng tôi quan tâm đến giới hạn trên về số lượng thao tác được thực hiện bởi thuật toán.Ω ( n2)Ô ( n )Ω ( n2)Ω ( n2)Ôi
Bây giờ, hãy nghĩ về một đối số bất lợi cho Sắp xếp chèn (bạn có thể cố gắng rút ra một đối số cho Sắp xếp lựa chọn bằng cách áp dụng các ý tưởng tương tự).
Hãy xem xét thuật toán Sắp xếp chèn khi chơi với đối thủ mà chúng ta sẽ gọi là đối thủ. Mục đích của đối thủ là cung cấp đầu vào X cho thuật toán tối đa hóa số lượng so sánh được thực hiện bởi thuật toán. Điều này thường được phân tích trong bối cảnh của cây quyết định . Cây quyết định hiển thị tất cả các chuỗi so sánh có thể có mà thuật toán có thể thực hiện. Mỗi nút bên trong của cây quyết định đại diện cho một so sánh duy nhất. Hai con của một nút đại diện cho hai kết quả so sánh (có / không hoặc đúng / sai). Mỗi lá đại diện cho một đầu ra có thể. Để sắp xếp các thuật toán, các lá là hoán vịcủa các phím. Thuật toán bắt đầu từ gốc và theo một đường dẫn xuống một chiếc lá. Tại mỗi nút nội bộ, câu trả lời cho việc so sánh được thực hiện cho thuật toán biết nút nào phải được truy cập tiếp theo. Khi thuật toán đạt đến một chiếc lá, nó đưa ra hoán vị tương ứng. Thời gian chạy của một thuật toán (được xem như một cây quyết định) cho một đầu vào đã cho là số lượng so sánh được thực hiện trong đường dẫn từ gốc đến lá đầu ra. Bây giờ, đối thủ có một chiến lược đơn giản sẽ hoạt động chống lại mọi thuật toán sắp xếp dựa trên so sánh, bao gồm Sắp xếp chèn: bất cứ khi nào thuật toán thực hiện so sánh, đối thủ sẽ chọn câu trả lời sẽ loại bỏ ít hoán vị nhất có thể.
Nói chung, do thực tế là với phần tử cóhoán vị có thể, bất kỳ cây quyết định để sắp xếp phải có ít nhấtlá, và do đó phải có độ sâu (bằng cách xấp xỉ của Stirling). Đối với Sắp xếp chèn, đối thủ có thể tạo một đầu vào cụ thể khiến cây quyết định tương ứng có độ sâu ít nhất .nn !n !Ω ( log( n ! ) ) = Ω ( n nhật kýn )Ω ( n2)
Thuật toán sử dụng một mảng để lưu trữ các phần tử đầu vào và dựa trên bất biến sau:A [ 1 . . n ]
Khi bắt đầu mỗi lần lặp của vòng lặp for, phân đoạn bao gồm các phần tử ban đầu trong , nhưng theo thứ tự được sắp xếp.A [ 1 . . j - 1 ]A [ 1 . . j - 1 ]
Trong mỗi lần lặp, các phần tử trong do đó đã được sắp xếp theo thứ tự và thuật toán kiểm tra và chèn nó vào vị trí thích hợp cuối cùng của nó, bằng cách so sánh giá trị của với giá trị của các phần tử trong , bắt đầu từ và tiếp tục trở lại và cứ thế cho đến khi không còn là số lớn nhất trong so sánh. Các phần tử trong ở trạng thái không xác định (liên quan đến thứ tự sắp xếp) và sẽ được xử lý trong các lần lặp lại sau.A [ 1 . . j - 1 ]Một [ j ]Một [ j ]A [ 1 . . j - 1 ]Một [ j - 1 ]Một [ j - 2 ]Một [ j ]A [ j + 1 . . n ]
Đây là chiến lược của kẻ thù. Biết rằng thuật toán hoạt động bằng cách chèn vào đúng vị trí của nó bằng cách di chuyển các phần tử trong , thì chiến lược rõ ràng là tối đa hóa trong lần lặp thứ số lượng phần tử phải có di chuyển để chứa . Điều này có thể dễ dàng thực hiện bằng cách cẩn thận chọn đầu vào sao cho theo thứ tự ngược lại . Thật vậy, trong trường hợp này, số phần tử phải được di chuyển trong mỗi lần lặp là . Điều này dẫn đến thời gian chạy trường hợp xấu nhất (được xác định bởi chuỗi số học tương ứng).Một [ j ]A [ 1 . . j - 1 ]jMột [ j ]j - 1Ω ( n2)