Научная статья на тему 'ОТ ЭЙНШТЕЙНА К ШЕРЛОКУ ХОЛМСУ (дедуктивный метод поиска в базе данных)'

ОТ ЭЙНШТЕЙНА К ШЕРЛОКУ ХОЛМСУ (дедуктивный метод поиска в базе данных) Текст научной статьи по специальности «Математика»

CC BY
171
31
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Коточигов Александр Михайлович

Разобрана задача, представляющая сплав бытового, почти развлекательного текста и таящегося за ним нетривиального анализа, необходимого для ее решения.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ОТ ЭЙНШТЕЙНА К ШЕРЛОКУ ХОЛМСУ (дедуктивный метод поиска в базе данных)»

Коточигов Александр Михайлович

ОТ ЭЙНШТЕЙНА К ШЕРЛОКУ ХОЛМСУ (дедуктивный метод поиска в базе данных)

Недавно из недр Интернета до меня добралась задача, снабженная роскошной вывеской «задача Эйнштейна». Оставляя в стороне вопрос об авторстве, скажу, что задача не нуждается в подобной рекламной поддержке. Она представляет очень удачный сплав бытового, почти развлекательного текста и таящегося за ним нетривиального анализа, необходимого для ее решения.

Но пора уже перейти к условию задачи.

На одной улице стоят 5 домов, окрашенных в 5 разны1х цветов. В каждом доме живет гражданин другой страны1. Каждыш из них пьет свой напиток, курит свои сигареты и содержит свое домашнее животное.

Определите, кто из них содержит

ры1б?

Если известно, что:

1. Британец живет в красном доме.

2. У шведа есть собака.

3. Датчанин пьет чай.

4. Зеленыш дом стоит слева от белого и вплотную к нему.

5. Хозяин зеленого дома пьет кофе.

6. У того, кто курит Pall-Mall, есть птицы1.

7. Хозяин желтого дома курит Dunhills.

8. Хозяин среднего дома пьет молоко.

9. Норвежец живет в первом доме.

10. Человек, которыш курит Blends, живет рядом с хозяином котов.

11. Тот, кто содержит лошадей, живет рядом с тем, кто курит Dunhills.

12. Тот, кто курит Bue Master, пьет

пиво.

13. Немец курит Prince.

14. Норвежец живет рядом с синим домом.

15. У того, кто курит Blends, есть сосед, который пьет воду.

Первое, что вспомнилось после прочтения текста - «задача Швейка» из знаменитого романа Гашека:

«Стоит четырехэтажный дом, в каждом этаже по восемь окон, на крыше два слуховых окна и две трубы, в каждом этаже по два квартиранта. А теперь скажите, господа, в каком году умерла у швейцара его бабушка?»

Разумеется, кроме эмоционального сходства, между задачами нет ничего общего.

Случайная гипотеза в задаче легко проверяется и с чрезвычайно высокой вероятностью отвергается. Добраться до решения методом проб и ошибок не так уж трудно, и, почивая на лаврах, можно помечтать о том, сколько поучительных сентенций услышал бы доктор Ватсон от Шерлока Холмса, если бы Конан Дойль написал рассказ о поисках рыбки. Вставая на защиту доктора Ватсона, мы обсудим универсальный метод решения подобных задач. Алгоритм решения задачи окажется обратимым, что позволит понять, как могла быть достигнута подобная балансировка условий, и составить для учеников Шерлока Холмса задачник по дедуктивному методу.

Первое, что бросается в глаза при решении задачи, - это трудность объясне-

ния решения, обусловленная чрезвычайной пестротой условий. Для того чтобы избавиться от этой пестроты, имеется классический способ - занумеровать все имеющиеся в условии группы однородных объектов и дальше работать только с числами. Проще всего в этом отношении с домами. Из условия задачи следует, что они имеют линейное расположение и, на самом деле, уже пронумерованы {1, 2, 3, 4, 5}. К остальным группам объектов придется применить «насилие» и занумеровать их произвольным способом. Эти взаимно однозначные соответствия являются для нас только удобными для работы обозначениями. Фиксируем их, например, так

«Н» - Национальность: британец - 1, швед — 2, датчанин - 3, норвежец - 4, немец - 5.

«Ц» - Цвет дома: красный - 1, зеленый - 2, желтый - 3, синий - 4, белый - 5.

«П» - Напиток: чай - 1, кофе - 2, молоко - 3, пиво - 4, вода - 5.

«С» - Сигареты: Prince -1, Pall-Mall - 2, Dunhills - 3, Blends - 4, Bue Master - 5.

«Ж» - Домашние животные: собаки -1, птицы - 2, коты - 3, лошади - 4, рыбы - 5.

Все позиции списков возникли из условий задачи, кроме рыб, которые упомянуты в вопросе задачи.

Теперь решение задачи может быть описано как таблица из пяти строк и шес-

ти столбцов, верхняя строка - вспомогательная, она не участвует в работе

№ «Н» «ц» «П» «с» «ж»

1 * * * * *

2 * * * * *

3 * * * * *

4 * * * * *

5 * * * * *

Первый столбец таблицы играет особую роль. Естественная упорядоченность одной из групп объектов важна для формулировки условий задачи и составляет естественную базу поиска решения. Звездочками помечены активные позиции таблицы, которые надо заполнить, исходя из условий задачи. Сейчас очень легко оценить безнадежность попыток решения задачи случайным выбором заполнения таблицы или перебором. Общее число вариантов необозримо, их существует (5!)5, а, как мы скоро увидим, наша задача имеет единственное решение. Мы построим алгоритм, который основан на анализе того, как то или иное условие может вписываться в таблицу. Такой анализ потребует формального описания условий в виде, близком к структуре нашей таблицы. Это легко сделать - большинство условий допускают очевидную интерпретацию в виде частично заполненных строк таблицы. Описания эти ясны без комментариев:

Условия № «Н» «Ц» «П» «С» «Ж»

1 * 1 1 * * *

2 * 2 * * * 1

3 * 3 * 1 * *

5 * * 2 2 * *

6 * * * * 2 2

7 * * 3 * 3 *

8 3 * * 3 * *

9 1 4 * * * *

12 * * * 4 5 *

13 * 5 * * 1 *

Остальные условия «не вписываются» в одну строку и, более того, могут требовать разветвлений. Первое препятствие мы обойдем, используя для описания условий две соседние строки (блок). Специфика задачи такова, что блоки большего размера не потребуются. Для преодоления разветвлений мы будем заменять каждое такое условие на два взаимно исключающих. Соответствующие описания имеют вид:

4 * * 2 * * *

* * 5 * * *

10-1 * * * * 4 *

* * * * * 3

10-2 * * * * * 3

* * * * 4 *

11-1 * * * * 3 *

* * * * * 4

11-2 * * * * * 4

* * * * 3 *

14-1 * 4 * * * *

* * 4 * * *

14-2 * * 4 * * *

* 4 * * * *

15-1 * * * * 4 *

* * * 5 * *

15-2 * * * 5 * *

* * * * 4 *

Короткий список забавных условий задачи превратился в большой и безликий конгломерат таблиц. Чтобы вдохнуть в него жизнь, требуется найти способ сделать описание более компактным и связать его с таблицей, которую надо заполнять.

Введем несколько терминов. Будем называть условие прямым, если в его первой позиции стоит число. Прямые условия в нашем случае - это условия 8 и 9. Они прямо вписываются в таблицу, в соответствии с номером дома.

На этом, как и на других этапах заполнения таблицы, могут возникнуть противоречия:

1) условия имеют равные числа на одной позиции и разные в другой,

2) условие с одним номером встречается в столбце более одного раза (кроме условий с разветвлением).

И то и другое говорит о неправильной постановке условий, для таких условий решений нет. Наша задача составлена правильно и таких противоречий в ней нет.

Условия (строковые или блочные) мы назовем сцепленными, если в них на одинаковой позиции появляются равные числа. В нашей задаче сцеплены, например, условия 4 и 5.

Сцепленные условия позволяют формировать новые блоки большего размера. Такие блоки интересны тем, что для их размещения в таблице существует меньше вариантов, в оптимальной ситуации такой вариант единственный.

Два строковых условия мы назовем несовместимыми, если они содержат разные числа на одинаковой позиции. Несовместимы, например, условия 1 и 2.

Для пары блоков это понятие усложняется. Пусть в каждом из блоков фиксировано по строке, мы будем говорить о несовместимости блоков по выделенным строкам, если эти строки несовместимы между собой. Блоки 10-2 и 11-1 несовместимы, если в первом фиксировать вторую строку, а во втором первую.

Будем говорить, что блок противоречит строке, если они сцеплены, но при этом некоторые строки блока выходят за рамки

таблицы. Например, блок 14-2 противоречит строке 9. В нашей (правильно поставленной) задаче противоречивые блоки могут появляться только в результате разветвлений.

Просматривая совпадение чисел по столбцам во всех условиях, мы получим следующий список новых блоков:

4, 5 * * 2 2 * *

* * 5 * * *

9, 14-1 1 4 * * * *

* * 4 * * *

7, 11-1 * * 3 * 3 *

* * * * * 4

7, 11-2 * * * * * 4

* * 3 * 3 *

Мы исключили противоречивую сцепку 9, 14-2 и не приводим описания сцепки условий 10 и 15. Описание последнего достаточно громоздко (четыре варианта), а для решения эта сцепка несущественна.

Приступим к решению задачи - заполнению таблицы. Прямые условия 8 и 9 и блок 9, 14-1 занимают первые три строки таблицы, которые образуют новый блок. Этот блок несовместим с блоком 4, 5 и, значит, его место в двух нижних строках таблицы. Зафиксируем промежуточный результат.

№ «Н» «Ц» «П» «С» «Ж»

1 4 * * * *

2 * 4 * * *

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3 * * 3 * *

4 * 2 2 * *

5 * 5 * * *

В сформировавшейся таблице условие 1 совместимо только со строкой 3, и, значит, его место там. После этого в столбце «Ц» остается свободной одна позиция, и, чтобы избежать несовместимости строк, мы должны поставить туда 3. Это порождает сцепку с условием 7 и далее с блоками 7, 11-1 или 7, 11-2. Проблема выбора решается тем, что последний блок противо-

речит 1-й строке. Таким образом, мы получаем следующую промежуточную таблицу.

№ «Н» «Ц» «П» «С» «Ж»

1 4 3 * 3 *

2 * 4 * * *

3 1 1 3 * *

4 * 2 2 * *

5 * 5 * * *

Для каждого из оставшихся условий имеются два или более вариантов размещения. Покажем, что реализуется только один из них. В рамках нашей терминологии следовало бы говорить о том, что мы будем работать с разветвленным блоком, по размерам равным всей таблице. Для сокращения записей мы проведем этот почти очевидный анализ менее формально. Условия 3 и 12 несовместны, и каждое из них может размещаться либо в строке 2, либо в строке 5. Если поместить условие 3 в строку 5, а условие 12 в строку 2, то, чтобы избежать несовместимости строк, мы ставим 5 в первую строку столбца «П». Но, как легко видеть, это несовместимо с условием 15 (ни в одном из его вариантов). Реализация второго варианта размещения строк дает следующую таблицу:

№ «Н» «Ц» «П» «С» «Ж»

1 4 3 5 3 *

2 3 4 1 4 4

3 1 1 3 * *

4 * 2 2 * *

5 * 5 4 5 *

Теперь условие 13 совместимо только со строкой 4. После этого в строке 5 столбца «Н» остается место только для 2, и мы получаем сцепку с условием 2. Далее в столбце «С» остается свободной одна позиция - строка 3, и туда следует поставить число 2. Вновь зафиксируем промежуточный результат.

№ «Н» «Ц» «П» «С» «Ж»

1 4 3 5 3 *

2 3 4 1 4 4

3 1 1 3 2 *

4 5 2 2 1 *

5 2 5 4 5 1

Воспользуемся условием 6 и заполним до конца строку 3, после этого блок 10-1 оказывается противоречивым, а блок 10-2 имеет единственную возможную позицию в строчках 1 и 2.

№ «Н» «Ц» «П» «С» «Ж»

1 4 3 5 3 3

2 3 4 1 4 4

3 1 1 3 2 2

4 5 2 2 1 *

5 2 5 4 5 1

Задача решена, так как ее вопрос -кто из них содержит рыб? - переводится на язык чисел так: какое число стоит в столбце «Н» в той из строк, где в столбце «Ж» стоит число 5? Место числа 5 в столбце «Ж» пока занято (*), и, заглядывая в столбец «Н» этой строки, мы обнаруживаем там то же число 5. Мы завершаем наше расследование - в списке национальностей под номером 5 стоит немец. Следовательно, он и содержит рыб.

© Наши авторы, 2003. Our authors. 2003.

Коточигов Александр Михайлович, доктор физико-математических наук, заведующий кафедрой Высшей математики № 2 СПбГЭТУ («ЛЭТИ»).

i Надоели баннеры? Вы всегда можете отключить рекламу.