Имя: Пароль:
IT
 
Задача. Ключи и замки
0 Ненавижу 1С
 
гуру
20.07.18
13:11
У нас есть N ключей {К1,К2,...,КN} и столько же замков {З1,З2,...,ЗN}. Будем считать, что и те как-то пронумерованы. Каждый ключ подходит ровно к одному замку.
Вы хотите определить какой ключ подходит к какому замку. Для этого разрешается проделывать следующую операцию:
Взять любое количество 1<=r<=N ключей и столько же замков и передать ключнику. Ключник проверяет все ключи и замки, отдает их обратно и говорит число пар ключ-замок, которые удалось подобрать, но не говорит сами пары.

За сколько таких операций можно узнать все пары соответствующих ключей/замков от количества N?

Для N=2 ответ 1.
Для N=3 ответ 3.
1 Fish
 
гуру
20.07.18
13:16
(0) А почему для N=3 ответ 3? Вполне можно и двумя обойтись, если первый и второй ключ подойдут с первой попытки.
2 Ненавижу 1С
 
гуру
20.07.18
13:19
(1) а если не подойдет?
3 Ненавижу 1С
 
гуру
20.07.18
13:19
+(0) пояснение "можно ГАРАНТИРОВАННО узнать"
4 1Сергей
 
20.07.18
13:22
(0)

Для N=2 ответ 1
Для N=3 ответ 2
5 1Сергей
 
20.07.18
13:22
хотя, нет. всё-таки 3, да
6 Fish
 
гуру
20.07.18
13:23
(3) Ну так, если сразу подойдет, то тоже гарантированно узнаешь. Имхо, правильное уточнение должно звучать так: "какое _максимальное_ кол-во операций для определения".
А для усложнения можно добавить "какое _минимальное_ и какое _максимальное_ кол-во операций."
7 Малыш Джон
 
20.07.18
13:24
каждый ключ поочередно проверяем с каждым замком(отдаем по одной паре ключ замок). Таким способом первый ключ отыщем гарантированно за N-1 операций(если предпоследний не подошел, последний можно не проверять), второй - за N-2 и т.д.
таким образом имеем арифметическую прогрессию - N-1, N-2, ... 2, 1.
Итого операций: N(N-1)/2
8 Малыш Джон
 
20.07.18
13:25
+(7) ааа, и проверку последней пары тоже можно не делать.
Тогда -  N(N-1)/2-1
9 Малыш Джон
 
20.07.18
13:26
+(8) хотя нет, все верно - N(N-1)/2
10 Fish
 
гуру
20.07.18
13:26
(8) Так неинтересно :)
А для минимального кол-ва операций посчитаешь?
11 Малыш Джон
 
20.07.18
13:28
(10) ))))))))
а про минимальное количество условия не было)
я вообще хотел сначала N*N написать, но потом сообразил, что это уж слишком избыточное количество
12 Tatitutu
 
20.07.18
13:29
(3)
"которые удалось подобрать"
Ситуация:
ключ1 , ключ3, ключ15
и замок2 , замок8 , замок 28
13 Ненавижу 1С
 
гуру
20.07.18
13:31
Мое предположение, что при N=4 будет ответ 5
14 1Сергей
 
20.07.18
13:32
Что-то не пойму зачем в задачу добавлен выбор R. При R>1 количество операций только увеличивается
15 DTX 4th
 
20.07.18
13:33
(7) Тоже по индукции нашёл такое решение, но ведь не факт, что это минимальное число операций.
16 Малыш Джон
 
20.07.18
13:39
(13) да, при N=4, попыток будет максимум 5, так что формула из 7 - не минимальное количество
17 Ching Woo
 
20.07.18
20:25
(0) Не знаю ответ
18 RomanYS
 
20.07.18
20:38
(14) не факт. Проверяя 1 ключ вы получаете 1 бит информации, а проверяя 3 ключа - 2 бита.
19 RomanYS
 
20.07.18
20:49
(13) при N=4 меньше чем за 4 точно нельзя. А вот можно ли за 4?
20 Ching Woo
 
20.07.18
21:03
(18) откуда там 2 бита?
21 RomanYS
 
20.07.18
21:12
(20) 4 результата проверки: 0,1,2,3
Конечно это если N>5.
22 Ching Woo
 
20.07.18
21:30
(21) Тогда сколько бит получаем если проверяем два ключа?
23 RomanYS
 
20.07.18
21:41
(22)
Если бы три варианта были равновероятны (что в данном случае не так), то log2(3).
Только зря ты этот вопрос задал, сейчас опять срач не по теме будет ;)
24 Ching Woo
 
20.07.18
22:15
Короче, максимально много информации получаем если проверяем половину ключей с первого раза.

Нужно теперь понять как получить максимально много информации на второй и последующих проверках.
25 RomanYS
 
20.07.18
22:23
(24) Это зависит от того какую задачу мы решаем (N=4 или общую).
В общем случае во второй проверке тоже должна быть половина (только в совершенно другой комбинации)
26 Сияющий в темноте
 
20.07.18
22:32
Если обрзначить каждый замок от 1 до н битом в позиции н,и аналогично ключи от 1 до н битом в позиции н
когда мы даем ключнику замки,то есть число из битов А, и ключи,то есть число из битов Б,то ключник вычисляет логическое И этих двух последовательностей битов,и возвращает как результат,количество битов в числе.
далее,требуется построить несколько последовательностей битов,чтобы они различались только одним битом и прогнать их через ключника
27 Сияющий в темноте
 
20.07.18
22:35
биты ключей мы знаем,а биты замков спрятаны от нас массивом С[з],массив знает только ключник,для каждого замка он выдает позицию бита
нужно определить этот массив
28 Сияющий в темноте
 
20.07.18
22:49
А дальше аналог алгоритма СРС,мы меняем биты блоками,получая последовательности,где изменение битов искажает конрольную сумму и выполняем сравнения
там формула числа операций двоичный логарифм,и так как две последовательности,то нужно умножить на четыре или,наверное,на три,т.к.четвертая определяется

другими словами,делим замки и ключи на две кучи и гоняем 4 раза к ключнику,потом кучи переставляем по алгоритму срс и гоняем снова 4 раза и так по логарифму двух от количества мы прогоним всех по всем
29 RomanYS
 
20.07.18
23:20
(26)(27)(28) Звучит красиво, про "алгоритм СРС" правда даже яндекс ничего внятного не говорит.
Идея то на поверхности, проблема с "требуется построить несколько последовательностей битов,чтобы они различались только одним битом и прогнать их через ключника". Т.к. независимых последовательностей не так много, и построить по нужному условию не получится.

Давайте для N=4 решим
30 Малыш Джон
 
21.07.18
08:07
(26) Если честно не понял, как ты собрался набор из N ключей(количество перестановок = N!) собрался обозначать двоичным N-значным числом (количество возможных значений = 2^N)...

Может и правда, на примере N=4 продемонстрируешь?)
31 Сияющий в темноте
 
21.07.18
09:34
А причем здесь перестановка,перествновка ключей ничего не дает,т.к.проследовательность битов от положения ключей не зависит.
А алгоритм срс простой,первый бит,это сумма всех бито по модулю два,второй бит,сумма блоков по одному биту через такой же блок,следующий бит,это сумма чередующихся блоков по два и т.д.по степени двойки

Для четырех получаются пары сначала к1,к2 и к3,к4 потом пары к1,к3 и к2,к6
так как из испытаний четверток избыточное,то гоняем 6 раз.
к1,к2 з[с[1]],з[c[2]]
к1,к2 и з[с[3]],з[с[4]]
к3,к4 и з[с[1]],з[с[2]]
к1,к3 и з[с[1]],з[с[3]]
к1,к3 и з[с[2]],з[с[4]]
к2,к4 и з[с[1]],з[с[3]]
32 Сияющий в темноте
 
21.07.18
09:41
хотя нет,в данном случае гонять первые ключи во вторую группу также не надо,т.к.
к1,к2 и з1,з2 это сколько ключей от первой группы подходит к замкам первой группы.очевидно,что к замкам второй группы подойдут остальные ключи.
к3,к4  з1,з2 сколько ключей из второй группы подходит к замкам первой группы.
33 RomanYS
 
21.07.18
12:09
(32) вот про это и говорилось в (29) что не получится
34 Aleksey
 
21.07.18
12:50
(10) А разве минималоьное количество не равно N-1?
35 Aleksey
 
21.07.18
12:51
т.е. оно разве не равно "угадал с первой попытки"?
36 RomanYS
 
21.07.18
13:08
(34)(35) Тогда уж 0, угадал с первой попытки и не стал проверять.
Естественно в нормальной формулировке вопрос будет содержать
"за какое МИНИМАЛЬНОЕ число попыток можно ГАРАНТИРОВАННО узнать"
37 uno-group
 
21.07.18
13:44
Для краткости 1,2,3,4 - замки; А,Б,С,Д ключи.
В простейшем случае. худший вариант
1а -0
1б -0
1с -0 значит 1д подходят +3 для поиска среди 3 ответ 6
более сложный вариант
Отдаем 1а,2б,3с получаем ответ 0,1,2,3
А вот дальше в зависимости от цифры различные действия
38 Ching Woo
 
21.07.18
14:06
(36) Слово ГАРАНТИРОВАННО тут не приносит никакой пользы. Тот кто не понял оригинальную формулировку, может так же сказать что если угадать с первой попытки, то ГАРАНТИРОВАННО узнаешь какой ключ от какого замка.
39 DTX 4th
 
23.07.18
14:08
(13) Похоже, для N=4 хватит четырёх попыток.
40 DTX 4th
 
23.07.18
14:13
Не, тупанул. Но тему надо было поднять :)
41 RomanYS
 
23.07.18
14:33
(40) +100))
Для N=4 получается за 5, и вроде получается доказать, что нельзя 4.

ТС колись. Откуда задача? Она должна аналитически решаться для произвольного N?
42 Ненавижу 1С
 
гуру
23.07.18
15:05
(41) на просторах интернета нашел
решения не знаю
хочется верить в формулу

[log2(N!)]+1 при N>2
43 Михаил Козлов
 
23.07.18
15:44
(42) Похоже на энтропию.
К планированию экспериментов отношения не имеет?
44 Xapac
 
23.07.18
15:56
(0) а почему нельзя сразу N отдать, он все и подберет.
нет?
45 RomanYS
 
23.07.18
15:59
(44) он скажет, что совпало N. Подбирать самому придется)))
46 dezss
 
23.07.18
16:05
(42) ну ка при N = 3 посчитай этот факториал)))
47 Xapac
 
23.07.18
16:05
а все понял
у меня получилось
(N-1) + (N-2) + ... + (N-(N-1)
для 2 - 1
для 3 - 3
для 4 - 6
48 dezss
 
23.07.18
16:06
(47) ИМХО, должно быть меньше...
нужно другую стратеги выбирать, а не просто перебирать пары...
49 Ненавижу 1С
 
гуру
23.07.18
16:10
(46) 3!=6
2<log2(6)<3
[log2(6)]=2
итого 3
50 dezss
 
23.07.18
16:28
(49) а теперь для 4)
51 RomanYS
 
23.07.18
16:47
(50) для 4 тоже сойдется

(48) так это и должна быть другая стратегия. В случае перебора  пар ~N^2 будет.

(42) а алгоритм под формулу есть, хотя бы приблизительный?
52 dezss
 
23.07.18
16:49
(51) не сойдется...и для 3 не сходится...для 3-х можно за 2 сравнения все сделать...
формула, вроде, почти правильная...только +1 надо убрать...
53 Масянька
 
23.07.18
16:52
(52) Для 3-ех за 2 - докажи...
54 RomanYS
 
23.07.18
16:53
(53) тоже интересно))
55 Ненавижу 1С
 
гуру
23.07.18
17:00
(51)(52) алгоритма пока нет
есть общие соображения

всего вариантов ключ-замок равно N!
вот если мы сможем за каждый раз "увеличивать информацию вдвое", то вот так и получим

в частности при N=3 имеем 6 вариантов и за два хода не удается найти нужную перестановку
56 Масянька
 
23.07.18
17:05
У меня получилось:
N = 3 -> 3
N = 4 -> 6
N = 5 -> 10
N = 6 -> 15
N = 7 -> 21
А тут мне сунули таракана... И я испугалась :(((((((((((((((
57 Fish
 
гуру
23.07.18
17:07
(53) Смотри (1).
58 Масянька
 
23.07.18
17:09
(57) Если да кабы во рту росли грибы. (С)
Да, не простые...
59 Fish
 
гуру
23.07.18
17:12
(58) Просто для любых N ключей и N замков есть максимальное кол-во комбинаций, позволяющих подобрать все пары, а есть минимальное.
Для N = 3, минимум - это 2, а максимум 3.
60 RomanYS
 
23.07.18
17:16
(55) Уже при N=4 "увеличивать информацию вдвое" не получается. При проверке двух пар в 16 случаях из 24 мы получим 1, т.е в этом случае область поиска сократится только в полтора раза. Проверять одну пару ещё хуже.
61 Масянька
 
23.07.18
17:19
(55) А как ты себе это представляешь?
По любому, нужно или один ключ к каждому замку проверять, или один замок к каждому ключу.
И получается треугольник с катетами N-1.
62 Ненавижу 1С
 
гуру
23.07.18
17:19
(60) тоже об этом думал, но мы еще автоматически узнаём, что и в другой паре 1.
но пока мало понятно
63 RomanYS
 
23.07.18
17:25
(62) "еще автоматически узнаём, что и в другой паре 1" это уже  учтено в том, что 8 вариантов исключены, а 16 осталось.
Правда вторая проверка (тоже 2 пар) позволяет сузить область до 8 вариантов. Т.е. заветный 1бит во второй проверке мы получаем.
64 Сияющий в темноте
 
24.07.18
00:45
А почему для четырех четыре нельзя?
гоним к1,к2 и з1,з2
результат 0,1 или 2
(попутно тот же результат получается для к3,к4 и з3,з4)
если ответ 0,то меняем замки местами з1,з2 на з3,з4 и мы как бы получили 2.
Если 1,то гоним пару к1,к3 з1,з3 тут тоже ответ будет 0,1 или 2
если ноль,то к1 для з4,а к4 для з1,к3 остается для з2,а к2 для з3
если 1,то мы уперлись в к1 для з3 или к3 для з1,что то одно,нужно прогнать к1 и з3,чтобы это получить
если 1,то к1 для з3,к3 для з2,к2 для з4 и к4 для з1
то есть,три прогона.

или что то не так?
65 Сияющий в темноте
 
24.07.18
09:27
Четыре прогона,т.к.вторую пару точно также нужно гнать.
66 Сияющий в темноте
 
24.07.18
09:37
Вообще,максимальная информативность,когда гоним половину,то есть Н/2,всего исходов Н факториал.
то есть грубая оценка ((Н/2)+1)^Х=Н!
наш х число прогонов.
только получается целая часть от Н/2.
когда 3,то 2^Х>=6, то есть х=3
когда 4,то 3^Х>=24,то получается 3, значит,нужно искать способ найти за 3 шага.
67 Сияющий в темноте
 
24.07.18
09:41
Для 5 получается 5 вариантов,нужно смотреть.
68 RomanYS
 
24.07.18
10:30
(66) Прочитай (60) и (63)
Исходы проверок сильно неравномерно распределены. Для проверки двух пар при N=4 в
четырех случаях вернется "0"
четырех - "2"
шестнадцати(!) - "1".
Твои рассуждения (и оценка) были бы верны, если после каждой проверки число вариантов сокращалось бы втрое.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан