Các thuật toán gần đúng được sử dụng trong các thuật toán chính xác


11

Các thuật toán gần đúng có thể cung cấp đầu ra lên đến một số yếu tố không đổi. Đây là một chút ít thỏa mãn hơn các thuật toán chính xác.

Tuy nhiên, các yếu tố không đổi được bỏ qua trong sự phức tạp thời gian.

Vì vậy, tôi tự hỏi liệu thủ thuật sau là có thể hoặc đã được sử dụng, để giải quyết một số vấn đề :BMột

  1. Sử dụng thuật toán giải gần đúng bài toán để nhận được giải pháp trong hệ số không đổi;SMộtS
  2. Sử dụng một thuật toán chính xác, giải bài toán , có thời gian chạy phụ thuộc vào trọng số của nhưng hoạt động miễn là là một giải pháp chính xác.S SBSS

Theo cách này, phép tính gần đúng là một "tài liệu con" của một thuật toán chính xác và yếu tố không đổi bị mất ở bước 1 được nuốt vào bước 2.


Crosspost từ toán SE
sdcvvc

Bạn có làm rõ ý của bạn về và trọng lượng của S không? BMộtS
Yoshio Okamoto

Đây là không chính thức, cho concreteness: vấn đề tìm kiếm , Một là nghĩ như một bài toán tối ưu (vì vậy các giải pháp thực hiện một số trọng lượng) và B Một là thành phần của mối quan hệ. Một,BMộtBMột
sdcvvc

Các câu trả lời sẽ là một bộ sưu tập. Vì vậy, tôi nghĩ sẽ phù hợp hơn khi biến nó thành wiki cộng đồng.
Yoshio Okamoto

Thêm thẻ danh sách lớn là đủ, không cần thiết phải tạo cộng đồng wiki IMHO.
Gopi

Câu trả lời:


12

Một ví dụ từ sự phức tạp tham số là một kernelization cho vấn đề đỉnh nắp sử dụng một định lý của Nemhauser và Trotter.

Trong bài toán che đỉnh tối thiểu, chúng ta được cung cấp một đồ thị vô hướng G và chúng ta cần tìm một đỉnh của G có kích thước tối thiểu. Một đỉnh đỉnh của đồ thị vô hướng là một tập hợp con đỉnh chạm vào tất cả các cạnh.

Đây là một thuật toán chính xác sử dụng xấp xỉ ở giai đoạn đầu tiên.

Giai đoạn 1: Thiết lập công thức lập trình tuyến tính số nguyên của bài toán che đỉnh tối thiểu . Người ta đã biết (hoặc dễ dàng chỉ ra) rằng một giải pháp tối ưu cơ bản của thư giãn lập trình tuyến tính là một nửa tích phân (nghĩa là mọi tọa độ là 0, 1 hoặc 1/2). Một giải pháp tối ưu cơ bản như vậy có thể được tìm thấy bằng thuật toán thời gian đa thức thông thường cho lập trình tuyến tính (hoặc trong trường hợp đặc biệt này, chúng ta có thể coi nó là một vấn đề về lưu lượng mạng, vì vậy chúng ta có thể giải quyết nó theo cách kết hợp trong thời gian đa thức). Có một giải pháp tối ưu cơ bản như vậy, chúng tôi làm tròn nó để có được một giải pháp khả thi cho vấn đề lập trình tuyến tính số nguyên ban đầu. Gọi S là tập con đỉnh tương ứng. Thật tốt khi lưu ý rằng S là xấp xỉ 2 của thể hiện bìa đỉnh tối thiểu đã cho.

Giai đoạn 2: Tìm một nắp đỉnh tối thiểu trong biểu đồ con được tạo bởi S (ví dụ: bằng cách tìm kiếm toàn diện). Một định lý của Nemhauser và Trotter nói rằng sơ đồ con này chứa một giải pháp tối ưu của đồ thị đầu vào ban đầu. Vì vậy, tính chính xác của phương pháp này sau đây.

Bạn có thể tham khảo một cuốn sách của Niedermeier về các thuật toán tham số cố định cho thuật toán này.


11

Một ví dụ có liên quan đến sự phân hủy cây và đồ thị của treewidth nhỏ.

Thông thường, nếu chúng ta được phân tách cây, việc áp dụng lập trình động để giải quyết vấn đề đồ thị tối giản. Thời gian chạy phụ thuộc vào chiều rộng của phân hủy cây.B

Tuy nhiên, thông thường chúng ta không được phân hủy cây, nhưng chúng ta cần tìm nó. Để giải quyết vấn đề nhanh nhất có thể, chúng tôi muốn tìm một phân tách cây có chiều rộng nhỏ nhất có thể - bây giờ đây là vấn đề A của chúng tôi .BA

AAAAB


BA

BMộtMộtB


Mặc dù ví dụ về treewidth hoạt động trên nguyên tắc, nhưng sẽ khó thực hiện trong thực tế bởi vì rất khó để ước chừng treewidth hoàn toàn tốt (vì bạn có thể ước chừng clique)
Suresh Venkat

8

Một ví dụ về thuật toán gần đúng hội tụ cho giải pháp chính xác sẽ là thuật toán Ellipsoid để giải LP - nếu các hệ số là số hữu tỷ, thì người ta có thể tính khoảng cách tối thiểu giữa hai đỉnh của đa giác khả thi. Bây giờ, thuật toán ellipsoid tính toán lặp lại một elliposoid nhỏ hơn và nhỏ hơn phải chứa giải pháp tối ưu. Khi elliposoid đủ nhỏ để chỉ chứa một đỉnh như vậy, về cơ bản bạn đã tìm thấy đỉnh tối ưu. Đây là lý do tại sao LP là đa thức yếu.

k

Cuối cùng, đi xa hơn một lĩnh vực - nhiều thuật toán tuân theo kỹ thuật thay đổi (lấy một mẫu ngẫu nhiên - và sau đó thực hiện một số bản sửa lỗi để có được những gì bạn muốn) rơi vào một khung như vậy. Một ví dụ dễ thương là thuật toán tính toán trung vị bằng cách lấy mẫu ngẫu nhiên (xem cuốn sách của Motwani và Raghavan). Có rất nhiều ví dụ như vậy - có thể cho rằng nhiều thuật toán gia tăng ngẫu nhiên trong Hình học tính toán rơi vào khung này.


4

Nhiều thuật toán nhạy cảm đầu ra sử dụng kỹ thuật này. Ví dụ, đây là một vấn đề đơn giản mà kỹ thuật này có thể được sử dụng:

Vấn đề . Bạn được cung cấp một mảng A [1 .. n ] trong đó mỗi phần tử nằm tối đa k vị trí cách vị trí mà nó sẽ có nếu A được sắp xếp.

Ví dụ: A [1..7] được hiển thị bên dưới có thể là một mảng đầu vào cho k = 2.

Thiết kế một thuật toán để sắp xếp mảng theo thời gian O ( n log k ), giả sử k không xác định.

Nguồn vấn đề: Lưu trữ Algo Muse .

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.