spamsink: (Default)
[personal profile] spamsink


Есть такая задача: дано несколько строк одинаковой длины из алфавита "01X". Требуется ответить на вопрос, покрывают ли они в совокупности все возможные двоичные строки той же длины, если Х может соответствовать и нулю, и единице. Вот что делают злосчастные потомки жрецов бенаресского храма:

0. Если строки нулевой длины, вернем ИСТИНА.
1. Найдем позицию, в которой во всех строках реже всего встречается Х.
2. Если в этой позиции встречаются только нули или только единицы, вернем ЛОЖЬ.
3. Поделим все строки на два подмножества: в одном будут строки, в которых в этой позиции 0 или Х, в другом 1 или Х; и вырежем эту позицию из строк - тем самым все строки стали на один символ короче.
4. Если эта же процедура, запущенная на меньшем из подмножеств, вернула ЛОЖЬ, вернем ЛОЖЬ.
5. Запустим эту же процедуру на другом подмножестве и вернем ее результат.

Задание 1. Что нужно добавить к этому алгоритму, чтобы избавить его от бенаресского проклятия?
Задание 2. Какой наглостью нужно обладать, чтобы после сообщения о неприемлемой скорости работы алгоритма заявить "It's a very involved issue"?

Ответ на задание 1:
0. Если строки нулевой длины или нашлась строка, состоящая из одних Х, вернем ИСТИНА.
Это добавление ликвидирует экспоненциальную сложность анализа таких строк.

Ответ на задание 2 оставляется в качестве упражнения.

Date: 2011-11-17 08:33 am (UTC)
From: [identity profile] lasthand.livejournal.com
Полез в словарь смотреть возможные значения слова involve.
Полез в википедию за словом Бенарес.
Пошел по алгоритму, споткнулся на пункте два, пошел к началу перечитывать условие.
Минуту свопился на слове "покрывают".
Минуту свопился на слове "несколько".
Ушел делать кофе.

Date: 2011-11-17 04:19 pm (UTC)
From: [identity profile] lasthand.livejournal.com
Не факт, что утомил бы. По моим скромным наблюдениям у детей реже встречаются утренние тормоза и привычка листать журналы с конца. Задание интересное, только мозгов свободных под неё пока не нашлось, пришлось отложить.

Сюръекцию не надо, лучше "в совокупности" куда-нибудь сдвинуть, но и то не обязательно.

Date: 2011-11-17 01:20 pm (UTC)
From: [identity profile] archaicos.livejournal.com
Не понимаю сочетание пунктов 1 и 2. Так X встречается реже, один раз или никогда?

что-то торможу

Date: 2011-11-21 09:21 am (UTC)
From: [identity profile] archaicos.livejournal.com
Пункт 3:
- что нам разрешает неглядя ни на что больше вырезать позицию из всех строк?
- что нам разрешает неглядя ни на что больше разбить список строк на два?

Re: что-то торможу

Date: 2011-11-21 09:40 am (UTC)
From: [identity profile] archaicos.livejournal.com
Понятно, что это нужно для "сходимости". Вопрос не в том, для чего нужно, а почему это правильно делать именно так.

Date: 2011-11-17 04:24 pm (UTC)
From: [identity profile] sab123.livejournal.com
Надо не добавить, а убрать :-) Вроде, всех делов:

0. Завести два битовых массива той же длины, изначально заполненных нулями. Первый массив будет считать покрытость нулями, второй - единичками.
1. Для каждой строки из множества, проходим поэлементно, и если там содержится 0, устанавливаем соответствующий бит в 1-м массиве, если 1 - во 2-м массиве, если Х - то в обоих двух.
2. Смотрим, все ли биты в полученных массивах стали содержать "1". Если да, то все покрыто. Иначе будут "0" в непокрытых позициях.

Date: 2011-11-17 07:16 pm (UTC)
From: [identity profile] sab123.livejournal.com
Чего это не покрывают? Все возможные биты покрывают. Ну, комбинации - ладно, не покрывают.
Page generated Apr. 30th, 2026 03:24 pm
Powered by Dreamwidth Studios