"Định hướng" của việc cắt giảm?


7

Tôi đã thấy mình hơi bối rối với hướng giảm được sử dụng để cho thấy rằng một số ngôn ngữ nhất định không được đệ quy. Ví dụ: giả sử chúng tôi muốn xác định xem ( ) là không thể giải quyết được. Tôi biết chúng ta có thể cho rằng đó là quyết định và sau đó cố gắng xây dựng một người quyết định cho vấn đề chấp nhận, điều này là không thể. Nhưng mặc dù chúng tôi đang sử dụng Vấn đề chấp nhận ( ) để giúp giải quyết vấn đề có thể giải quyết được của Vấn đề dừng, chúng tôi đã giảm vấn đề chấp nhận sang vấn đề tạm dừng, phải không?HMộtLTTMMộtTM

Đôi khi tôi có một chút bối rối khi gặp phải những câu hỏi yêu cầu tôi triển khai giảm; Tôi sẽ được yêu cầu giảm ngôn ngữ thành , nhưng điều đó có nghĩa là là một ví dụ đơn giản hơn của một vấn đề của , phải (hoặc ít nhất là nên)? Tôi cho rằng không thể giảm phiên bản đơn giản hơn của vấn đề thành phiên bản phức tạp hơn của vấn đề, tôi có tin đúng không? xyyx


Nếu chúng ta tin rằng thật khó để xây dựng một cái thang lên mặt trăng, thì chúng ta cũng phải tin rằng ít nhất cũng khó để chế tạo một thiết bị sao chép bất kỳ vật thể nào - vì nếu một thiết bị như vậy dễ chế tạo, thì chúng ta có thể đặt thang thông thường trong đó, gắn hai thang kết quả lại với nhau để tạo ra thang có chiều cao gấp đôi, và sau đó lặp lại quá trình này một vài lần, và do đó dễ dàng giải quyết vấn đề mà chúng tôi cho là khó. Ở đây tôi đã giảm thiểu các vấn đề về xây dựng một mặt trăng thang đến vấn đề xây dựng một duplicator đối tượng để chứng minh rằng sau này là ít nhất là khó khăn như trước đây.
j_random_hacker

@j_random_hacker Sự tương tự đó có vẻ khá phức tạp và nó dường như nhanh chóng bị phá vỡ. Tôi chỉ có thể sử dụng một nhà máy sản xuất thang thông thường để lấy thang của mình (vì vậy không cần thiết phải sao chép) và sau khi tôi mắc kẹt một vài thang với nhau, toàn bộ công trình sẽ mỏng manh đến mức nó sẽ sụp đổ dưới sức nặng của chính nó (vì vậy trùng lặp là không đủ).
David Richerby

3
@DavidR Richby: Đã xem xét các cấu trúc là một vấn đề lớn, không có tranh luận ở đó :) Mặc dù vậy, thực tế là một nhà máy sản xuất thang không phải là một vấn đề: để hiển thị vấn đề A ít nhất cũng khó như vấn đề B tất cả các trường hợp của B có thể được giải quyết bằng cách chuyển đổi sang các thể hiện của A, và do đó giải A cũng giải quyết được B; sự tồn tại của các giải pháp khác cho B là không liên quan. (Thật vậy, thực tế một trình sao chép đối tượng có thể được sử dụng để thực hiện một nhà máy sản xuất thang có nghĩa là vấn đề "trình sao chép" ít nhất cũng khó như vấn đề "nhà máy sản xuất thang", có vẻ như là một kết luận hợp lệ!)
psmears 14/11/17


3
@DavidR Richby: Bằng cách viết "lên mặt trăng", tôi đoán rằng tôi đã thu hút sự chú ý đến phần mỏng nhất của sự tương tự (cụ thể là sự mỏng manh của thang). Và không có chỗ để định nghĩa "khó", tôi muốn một kỹ thuật cần "khối lượng công việc tuyến tính" hoặc tệ hơn (như nhà máy sản xuất thang của bạn) để đủ điều kiện là "cứng" và "khối lượng công việc logarit" (như máy sao chép của tôi) đủ điều kiện là "dễ dàng". Có lẽ sự tương tự này không hoạt động, nhưng tôi nghĩ một số loại tương tự hơi chính xác, hơi thực tế nên có thể và hữu ích.
j_random_hacker

Câu trả lời:


17

Đừng lo lắng - mọi người đều bối rối bởi hướng giảm. Ngay cả những người đã làm việc trong các thuật toán và độ phức tạp trong nhiều thập kỷ thỉnh thoảng cũng có một câu, "Đợi đã, chúng ta đáng ra phải giảm điA đến B hoặc là B đến A?" chốc lát.

Giảm A đến B tạo ra một tuyên bố có dạng "Nếu tôi có thể giải quyết B, sau đó tôi cũng biết cách giải quyết A"." Giải quyết "theo nghĩa này có thể có nghĩa là" tính toán bằng bất kỳ máy Turing nào "hoặc" tính toán trong thời gian đa thức "hoặc bất kỳ khái niệm nào khác về giải pháp mà bối cảnh của bạn yêu cầu.

Điều này có vẻ trái ngược, vì "A giảm xuống B"ngụ ý rằng giải quyết B ít nhất là khó như giải quyết A, vì vậy bạn đã không giảm bớt khó khăn. Tuy nhiên, bạn có thể nghĩ về nó như giảm số lượng vấn đề bạn cần giải quyết. Hãy tưởng tượng rằng, vào đầu ngày, mục tiêu của bạn là tìm một thuật toán cho A và một thuật toán cho B. Chà, bây giờ bạn đã tìm thấy một sự giảm từA đến B, bạn đã giảm mục tiêu của mình xuống chỉ là tìm một thuật toán cho B.


2
"" Nếu tôi có thể giải B, thì tôi cũng biết cách giải A "" - Ngoài ra, nếu bạn biết giải A khó, thì bạn cũng biết giải B ít nhất cũng khó.
G. Bạch

2
Một nhà vật lý và một nhà toán học từng được yêu cầu tháo hai cái đinh, một trong số họ đấm vào tường, cái còn lại chỉ là nửa chừng. Nhà vật lý đầu tiên rút ra cái đã đi được một nửa và sau đó, sau một thời gian, đã xoay sở để rút cái thứ hai ra. Nhà toán học bắt đầu với một trong tất cả các cách trên tường, vì nó thú vị hơn. Sau một thời gian và nỗ lực đáng kể, anh đã tìm cách lấy nó ra. Sau đó, anh ta nhìn vào người kia và thốt lên dòng chữ: "Điều này có thể được đơn giản hóa thành một vụ án đã được giải quyết", anh ta đấm nó vào tường.
tự đại diện

5

Không khi nào Một giảm xuống B, nó trực giác có nghĩa là Một đơn giản hơn B, Không phải hướng ngược lại.

Thực tế hơn: giả sử bạn muốn kiểm tra xMột. Thay vì làm điều đó theo một cách nào đó, bạn biến đổix theo một số chức năng (giảm) y= =f(x). Bây giờ bạn phải kiểm trayB.

Bạn chưa giải quyết được vấn đề ban đầu xMột, kể từ bây giờ bạn còn lại một vấn đề khác cần giải quyết: yB. Điều này có nghĩa là bạn đã giảm vấn đề ban đầu sang vấn đề khác.

Ban đầu có vẻ phản trực giác khi chúng ta giảm những thứ dễ dàng thành những thứ phức tạp hơn. Thật vậy, thực tế, tại sao một người muốn giải quyết một nhiệm vụ dễ dàng giảm bản thân họ thành một nhiệm vụ khó khăn hơn? Thay vào đó, chúng ta có muốn giảm nhiệm vụ của mình thành một nhiệm vụ dễ dàng hơn không?

Tuy nhiên, sự thật là: nếu chúng ta có thể giải quyết một nhiệm vụ khó khăn Một giảm nó thành một nhiệm vụ dễ dàng B, điều này có nghĩa rằng Một không thực sự khó hơn B. Thật vậy, nếu giải quyếtMột có thể đạt được bằng cách áp dụng chức năng khử, và sau đó giải quyết "dễ dàng hơn" B, nó có nghĩa là Một dễ hơn B ở nơi đầu tiên


5

Giảm từ A đến B là một phần của công việc cần làm A và những gì còn lại phải làm là B. Ví dụ: "lấy thức ăn" có thể được giảm xuống thành "nấu ăn" bằng cách "lấy nguyên liệu". Điều này có nghĩa là "nấu ăn" khó hơn "lấy thức ăn": Bất kỳ ai có thể "nấu" đều có thể "lấy thức ăn" (giả sử rằng việc giảm "lấy nguyên liệu" luôn hoạt động, ví dụ như sự hiện diện của một nơi cung cấp nguyên liệu miễn phí) .

Vẽ những thứ có xu hướng làm cho chúng dễ hiểu hơn:

nhập mô tả hình ảnh ở đây

Bạn muốn xây dựng hộp màu xanh (đại diện cho thuật toán nhận đầu vào x và quyết định nếu xA). Việc giảm sau đó là hộp màu đỏ và một khi bạn đã có nó, điều duy nhất còn lại phải làm để xây dựng hộp màu xanh là xây dựng hộp màu xanh lá cây. Vì vậy, nếu bạn có một hộp màu đỏ (làm giảmA đến B), xây dựng hộp màu xanh lá cây (quyết định B) ít nhất cũng khó như xây dựng cái màu xanh (quyết định đó A): Nếu bạn có một hộp màu xanh lá cây, rất dễ dàng để xây dựng một hộp màu xanh, trong khi nếu bạn xây dựng một hộp màu xanh, bạn có thể không thể xây dựng một hộp màu xanh lá cây.

Lưu ý rằng các lý do cho hai điều kiện xác định mức giảm xuất hiện trên bản vẽ này: thực tế là f là tính toán có nghĩa là bạn có thể xây dựng hộp màu đỏ, trong khi thực tế là f(x)BxA có nghĩa là bạn có thể kết nối hai dây ngoài cùng bên phải.


Tôi thấy đoạn đầu tiên khá khó theo dõi (một lần nữa, tôi không chắc là sự tương tự rất ngộ) nhưng là +1 nhất định cho phần còn lại của câu trả lời.
David Richerby
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.