Làm thế nào để phát hiện thứ tự ngăn xếp?


8

Chúng tôi lấy chuỗi các số nguyên từ đến và chúng tôi đẩy chúng lên từng ngăn một theo thứ tự. Giữa mỗi lần đẩy, chúng ta có thể chọn bật bất kỳ số lượng vật phẩm nào từ ngăn xếp (từ 0 đến kích thước ngăn xếp hiện tại).1n

Mỗi khi chúng tôi bật một giá trị từ ngăn xếp, chúng tôi sẽ in nó ra.

Ví dụ, được in ra khi chúng tôi làm . đến từ .1,2,3push, pop, push, pop, push, pop3,2,1push, push, push, pop, pop, pop

Tuy nhiên, không phải là bản in có thể, bởi vì không thể có bản in theo sau là , mà không nhìn thấy ở giữa.3,1,2312

Câu hỏi: Làm thế nào chúng ta có thể phát hiện các đơn đặt hàng không thể như ?3,1,2

Trong thực tế, dựa trên quan sát của tôi, tôi đã đưa ra một giải pháp tiềm năng. Nhưng vấn đề là tôi không thể chứng minh sự quan sát của mình đã hoàn tất.

Chương trình mà tôi đã viết với logic sau:

Khi giá trị hiện tại trừ đi giá trị tiếp theo lớn hơn 1, giá trị giữa hiện tại và tiếp theo không thể xuất hiện sau giá trị tiếp theo. Ví dụ: nếu current = 3 và next = 1, thì giá trị giữa hiện tại (3) và tiếp theo (1) là 2 không thể xuất hiện sau tiếp theo (1), do đó vi phạm quy tắc.3,1,2

Điều này bao gồm tất cả các trường hợp?


Câu trả lời:


6

Tôi không thể hiểu chính xác cách tiếp cận của bạn (Có vẻ đúng), nhưng có một quy tắc đơn giản cho các đơn hàng không thể: Đơn hàng là không thể không có sao cho và . Để như vậy chúng ta nói xấu gấp ba.TôiffmộtTôi,mộtj,mộtkmộtTôi>mộtk>mộtjTôi<j<kmộtTôi,mộtj,mộtk

Tại sao? Trước tiên, bạn nên chứng minh rằng nếu có bộ ba xấu thì trình tự là không thể, nhưng điều này đơn giản và tôi sẽ để nó như một bài tập (số giữa không thể bật sớm hơn lớn hơn trừ tất cả chúng xuất hiện trước tất cả chúng).

Thứ hai, bạn nên chứng minh tất cả các đơn đặt hàng không thể có ít nhất một bộ ba xấu, Giả sử bạn có một chuỗi không có bộ ba xấu, bạn có thể tìm thấy thứ tự đẩy và bật để nó không phải là chuỗi không thể. Để tái tạo các lệnh đẩy và pop, chỉ cần sử dụng cách tiếp cận ngây thơ (thao tác là bật trong khi bạn lặp qua các số liên tiếp), nhưng để chứng minh chính thức (để đơn giản), bạn có thể sử dụng cảm ứng, giả sử cho tất cả các chuỗi có độ dài nếu không có bộ ba xấu họ không thể. Đối với chuỗi có độ dài , bạn có thể đặt các thao tác là pop (bắt đầu từ cuối chuỗi), trong khi gặp các số liên tiếp tăng, giờ bạn có một chuỗi có độ dài , vớimnmm<n, không có bộ ba xấu, vì vậy bạn có thể xây dựng lại đẩy và bật cho chuỗi này, do đó, bản gốc là không thể. bắt đầu cảm ứng là chuỗi độ dài 3.

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.