Чи вирішується ця проблема кінцевих графів? Які чинники роблять проблему вирішуваною?


17

Хочеться знати, чи можна вирішити наступну проблему і як це з'ясувати. Кожна проблема, яку я бачу, можу сказати "так" чи "ні", тому чи можна вирішити більшість проблем та алгоритмів, за винятком декількох (що надано тут )?

Введення: Направлений і кінцевий графік , з і як вершини Питання: Чи існує шлях у з як початкова вершина, а як кінцева вершина?Gvu
Guv


Відповіді:


18

Будь-яка проблема, яка потребує лише вивчення обмеженої кількості даних, вирішується, оскільки існує алгоритм, який складається з перерахування всіх потенційних рішень. Це може бути смішно повільним, але це не актуально: якщо є алгоритм, це можна вирішити.

Проблема, яку ви заявляєте, передбачає кінцевий графік, який сильно натякає на те, що її можна вирішити. Власне кажучи, потрібно дивитися трохи далі. Проблема полягає у властивості шляхів на графіку, і іноді існує нескінченна кількість шляхів, коли графік містить цикл (ви можете обертати цей цикл стільки разів, скільки вам подобається). Однак легко перетворити проблему на скінченну проблему: якщо є якийсь шлях, починаючи з і закінчуючи v, який включає цикл, ви можете вирізати всі цикли на цьому шляху, і у вас є нове рішення, яке робить не включають цикл. Оскільки існує кінцева кількість контурів, які не включають цикл (якщо графік має k ребра, то є максимум k !uvkk!шляхи, які не використовують один і той самий край не один раз), проблема пошуку шляху від до v є остаточною, отже вирішуваною.uv

До речі, ця властивість називається підключенням .

Цей підхід є загальним, який називається скороченням . З огляду на непросту проблему, ми звели її до проблеми, яку ми знали, як її вирішити.

Часто важко довести, що проблема не може бути вирішена. Щоб довести, що проблема вирішується, все, що нам потрібно зробити, - це показати алгоритм, який її вирішує. Щоб довести, що проблема не може бути вирішена, нам потрібно довести, що жоден алгоритм не може існувати. Існує кілька відомих нерозв'язних проблем. На практиці більшу частину часу, коли ми доводимо, що проблема не може бути вирішена, ми показуємо, що існує добре відома невирішувана проблема, яка зводиться до нашої проблеми. Оскільки алгоритм нашої проблеми вирішив би відому невирішену проблему, наша проблема також повинна бути невирішеною.

Ви не можете сказати, що "більшість" проблем вирішуються, або "більшість" проблем не можна визначити. У деякому теоретичному сенсі майже всі проблеми не можна визначити, але ми маємо сильну тенденцію вирішувати "цікаві" проблеми, і вони, швидше за все, мають рішення.


15

Проблема тривіально вирішується, на що вказував Жил у коментарі. Щодо вашого іншого питання ...

є більшість проблем і алгоритми можна вирішити за винятком небагатьох (який надається тут )?

Ні. Насправді більшість проблем не можна визначити. Насправді існує незліченно багато проблем (мов), але існує лише чимало машин Тюрінга, а це означає, що існує якнайменше багато вирішуваних проблем.


8

Так, це рішуче, тому що ви можете зробити вичерпний пошук усіх можливих шляхів. Не потрібно дивитись на будь-які шляхи, які повторюють вершину, оскільки "об'їзд" можна було пропустити. Але довжина будь-якого не повторюваного шляху обмежена розміром графіка, який є кінцевим, і тому існує лише кінцево багато таких шляхів, які можна перевірити один за одним.

Gabaб


Це не залежить від входу? Я маю на увазі, коли наданої інформації недостатньо, щоб дізнатися відповідь, чи варто сказати, що це не можна визначити?
Джигілі

Я не впевнений, що ви просите; для описаної вами проблеми введення достатньо, щоб знайти відповідь.
Карл Маммерт

@Gigili Якщо проблему не можна було вирішити, було б неможливо придумати алгоритм, який видав би так чи ні для всіх вхідних даних. Це не так у цій проблемі, оскільки, використовуючи BFS, ми завжди можемо визначити, існує чи не існує шлях (і в лінійний час).
Зак Ленглі

@ZachLangley: Так, я просив загальну справу. якщо поданої інформації як вхідної інформації недостатньо для вирішення проблеми, чи проблема не може бути вирішена?
Гігілі

uvuv

7

Не існує методу, який би сказав, чи вирішується конкретна проблема, чи ні. З часом ви можете отримати добрий «підказ», вирішувати чи ні конкретну проблему.

Зазвичай я роблю наступне:

  1. спробуйте вирішити проблему. Тобто спробуйте продумати комп’ютерну програму, яка вирішує задану проблему. Для запропонованої вами проблеми - дуже проста програма просто перевірить будь-який можливий шлях і, таким чином, завжди вдасться знайти його (якщо він існує) або скаже, що шлях не існує інакше.
  2. чітко сформулюйте проблему. Багато проблем просто надто розпливчасті, але коли їх чітко написано, дуже легко зрозуміти, чи можна їх вирішити чи ні (порівнявши інші проблеми, відомі як не / вирішувані, або використовуючи відомі методи, як теорема Райса )
  3. Якщо (2) не спрацювало, але ви все ще вважаєте, що проблему не можна визначити, спробуйте довести її шляхом зменшення від нерозбірливої ​​проблеми (проблема зупинки (або її доповнення) працює у багатьох випадках).

Практично завжди, намагаючись зробити крок (1) для невирішеної проблеми, вам знадобиться ваша програма, щоб перевірити нескінченну кількість речей. Зазвичай це ознака того, що проблема не вирішується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.