Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет polytheme ([info]polytheme)
@ 2014-05-23 23:28:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
вспомнил простую, но милую задачу из КЛР
есть n микросхем, которые умеют тестировать друг друга. некоторые микросхемы бракованные. в парном тесте две микросхемы тестируют друг друга. небракованная микросхема говорит про другую из пары правильно, бракованная она или нет. бракованная может говорить что угодно.
тогда
а) если больше половины микросхем бракованные, установить, какие из них какие, парными тестами нельзя
б) если меньше половины микросхем бракованные, то можно установить, какие из них какие, за O(n) парных тестов.


(Читать комментарии) - (Добавить комментарий)


[info]lenkasm
2015-02-26 01:04 (ссылка)
b) найдем одну правильную микросхему за O(n), и тогда ею за O(n) проверим все остальные:

поделим множество микросхем произвольно на пары,

если будет лишняя микросхема, то ее отложим;
заставим каждую пару проверить друг друга

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

в каждой из оставшихся пар либо обе микросхемы рабочие, либо обе бракованные
наберем по одной микросхеме из каждой пары в новое множество микросхем

если в новом множестве нечетное кол-во микросхем, то хороших там снова больше, чем плохих,
иначе бракованных пар было бы больше и соответственно бракованных микросхем тоже больше

если в новом множестве четное кол-во микросхем, добавим туда отложенную микросхему
если до добавления там было одинаковое кол-во хороших и плохих, то отложенная микросхема была хорошая и после ее добавления стало больше хороших, чем плохих
если до добавления отложенной микросхемы хороших было больше, то и после добавления их останется больше, даже если отложенная микросхема была плохой
мы возвращаемся в начало и делаем по новой, пока не останется одна микросхема, она будет хорошей

кол-во итераций
2n + 2n/2 + ... + 2n/i^2 + ... 2n/k^2 = 2n*(1 + 1/2 + ... + 1/k^2) < 2n * 2

(Ответить)


(Читать комментарии) -