Найменування круглої задачі з відліку чисел - та алгоритмічні рішення?


10

Для не британців серед аудиторії є сегмент денного ігрового шоу, де учасники мають набір з 6 чисел та випадково генероване цільове число. Вони повинні досягти цільового числа, використовуючи будь-який (але не обов'язково всі) із 6 чисел, використовуючи лише арифметичні оператори. Усі обчислення повинні приводити до натуральних чисел.

Приклад: Youtube: Зворотний відлік - Найбільш надзвичайні ігри, коли-небудь?

Детальний опис подано у Вікіпедії: Зворотний відлік (Ігрове шоу)

Наприклад:

  • Зміст вибирає 6 чисел - два великі (можливості включають 25, 50, 75, 100) і чотири малі (числа 1 .. 10, кожне включене двічі в пул).
  • Числа визначені є 75, 50, 2, 3, 8, 7наведені з цільовим числом 812.
  • Одна спроба (75 + 50 - 8) * 7 - (3 * 2) = 813 (Це набирає 7 балів за рішення в межах 5 від цілі)
  • Точна відповідь буде (50 + 8) * 7 * 2 = 812 (Це набрало б 10 балів, що точно відповідає цілі).

Очевидно, ця проблема існувала ще до появи телебачення, але стаття у Вікіпедії не дає їй назви. Я також бачив цю гру в початковій школі, де я відвідував гру, яку називали «крипто» як міжкласовий конкурс - але пошук її зараз нічого не виявляє.

Я кілька разів брав участь у ньому, і мій тато написав таблицю Excel, яка намагалася усунути проблему, я не пам'ятаю, як вона працювала (тільки що вона не працювала, що з 65535 лімітом рядків Excel), але безумовно, має бути алгоритмічне рішення проблеми. Можливо, є рішення, яке працює так, як це робить людське пізнання (наприклад, паралельно знаходити числа "досить близькими", потім приймати кандидатів і виконувати "менші" операції).


1
Я вирішив це графічно - використовуйте вузли для представлення результатів обчислень та ребер для представлення операцій, які можна виконати на цих числах, потім використовуйте алгоритм пошуку графіків, щоб знайти потрібний шлях
ell

1
Зчитавши правила, здавалося б, що не можна досягти ідеального рішення - наприклад, якщо вибрані числа (1, 1, 2, 2, 3, 3), а цільове число - 999. Тож справді метою будь-якого алгоритму було б знайти найближче можливе рішення.
Річ Сміт

1
@ell: Рішення для пошуку ваших графіків - це пошук грубої сили?
Мартін

Я просто використав глибокий пошук в моєму виконанні, але не бачу, чому щось на зразок Dijkstra не вдалося використати.
ell

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

Відповіді:


4

Відмова: Ця відповідь не відповідає на питання повністю. Але для коментаря це занадто довго.

NP-жорсткий? Я вважаю, що ця проблема може бути важкою для NP .

Розглянемо окремий випадок проблеми " Рюкзак" :

Враховуючи набір натуральних чисел і додатне ціле число b , чи існує підмножина множини така, що сума всіх цілих чисел у цьому підмножині дорівнює b ?

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

Мені не вдалося використати це для підтвердження того, що відлік часу важкий для NP. Я не міг позбутися поділу. Поміркуйте, у нас є тисяча 2, а b = 7. Це ніколи не вирішиться з Knapsack, але завжди (?) З Countdown, принаймні всіма способами, які я намагався перенести проблему.

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

Ні, я не думаю, що має бути ефективний алгоритм.

Евристика. Відео на Youtube, пов’язане із запитанням, має приємний приклад: Учасник знайшов точну відповідь 952 = ((100 + 6) * 3 * 75 - 50) / 25. Це абсолютно проти моєї інтуїції, я б ніколи не намагався цього Спочатку в перший раз: Виберіть дуже велику кількість, потім розділіть її і отримайте результат.

З іншого боку, ми, люди, вважаємо, що нам не потрібно намагатися (довільний приклад) 50 * 75 * 100/2/3/7, щоб досягти тризначного числа. Але комп’ютери нічого не відчувають , вони просто підраховують.

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

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

Висновок. Реалізуючи алгоритм, можна подбати про те, щоб зняти однакові обчислення, такі як a / b / c = a / (b * c), але я думаю, що це досить важко зробити, і я не знаю, чи це значно покращує час виконання.

Комп'ютери, звичайно, швидше, ніж люди, у перевірці великої кількості можливостей. І в наш час навіть смартфони настільки швидкі, що я можу вирішити цю проблему за секунду, просто спробувавши всі можливості. (Я цього не тестував.) Є лише шість номерів, інакше було б, якби їх було, наприклад, 60.


Рішення прикладу, надзвичайно вражаюче, хоча воно є, не настільки складне, як може здатися вперше. Його розумовий процес, за вирахуванням більш очевидних речей, які він, можливо, спробував, ймовірно, був "Я можу дістатись до 954 за допомогою (100 + 6) * 9, що я можу зробити за допомогою (100 + 6) * 3 * 75/25. У мене залишилося 50, а 50/25 - два, тому я можу зняти 50 (100 + 6) * 3 * 75, перш ніж ділити на 25 ".
Тім Даун

1

Алгоритм насправді не дуже складний.

Враховуючи два числа a і b, ми можемо отримати результати a + b, abs (a - b) (я не знаю, чи дозволені негативні числа, і в цьому випадку ми можемо створити a - b і a + b), a * b і, можливо, a / b або b / a, якщо результат є цілим числом. Тож можливі результати - це набір до п'яти чисел. Назвіть цей набір S (a, b).

Візьміть шість чисел a, b, c, d, e і f.

Для кожного підмножини з двох чисел знайдіть числа, які вони можуть створити.

Потім для кожного підмножини з трьох чисел знайдіть числа, які вони можуть створити: S (a, b, c) = S (S (a, b), c) об'єднання S (S (a, c), b) об'єднання S ( S (b, c), a).

Потім те саме для кожного підмножини з 4 або 5 чисел, потім для всіх 6 чисел.

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