Làm thế nào để sử dụng các đối số bất lợi cho lựa chọn và sắp xếp chèn?


8

Tôi đã được yêu cầu tìm các đối số bất lợi cần thiết cho việc tìm các giới hạn thấp hơn để sắp xếp lựa chọn và chèn. Tôi không thể tìm thấy một tài liệu tham khảo cho nó bất cứ nơi nào.

Tôi có một số nghi ngờ về điều này. Tôi hiểu rằng các đối số bất lợi thường được sử dụng để tìm giới hạn thấp hơn cho một số "vấn đề" nhất định hơn là "thuật toán".

Tôi hiểu vấn đề sáp nhập. Nhưng làm thế nào tôi có thể viết một để lựa chọn và sắp xếp chèn?


1
Gợi ý: Đối thủ dễ dàng đánh lừa một thuật toán đã biết hơn nhiều so với tất cả các thuật toán.
Raphael

@Raphael Tôi biết nó đơn giản vì đối thủ biết thuật toán mà anh ta biết trong trường hợp xấu nhất mà thuật toán hành xử. Vì vậy, trong trường hợp lựa chọn / chèn sắp xếp độ phức tạp là O (n ^ 2), giới hạn dưới sẽ là chính nó? Tôi hơi bối rối về một thuật toán cụ thể. Giới hạn dưới có nghĩa là giới hạn dưới trong trường hợp xấu nhất?
dùng5507

@ user5507: Có, thông thường, các đối số nghịch cảnh được tạo ra để chứng minh ràng buộc thấp hơn cho cả lớp vấn đề, không phải là một thuật toán cụ thể. Trong trường hợp này, bạn chỉ cần xác định chiến lược cho đối thủ dẫn đến trường hợp xấu nhất cho 2 thuật toán này.
Peter

1
"Đối thủ" chỉ đơn giản là "đầu vào trong trường hợp xấu nhất" trong cài đặt này.
JeffE

Câu trả lời:


8

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)Ôi(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)Ôi(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!Ω(đăng nhập(n!))= =Ω(nđăng nhậpn)Ω(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:Một[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.Một[1..j-1]Một[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.Một[1..j-1]Một[j]Một[j]Một[1..j-1]Một[j-1]Một[j-2]Một[j]Một[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]Một[1..j-1]jMột[j]j-1Ω(n2)


9
tl; dr: Chiến lược của đối thủ là trình bày một mảng được sắp xếp ngược làm đầu vào, sau đó đi chơi ở một bãi biển ở đâu đó, uống một vài ly, có thể học cách lướt sóng.
JeffE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.