Скачать презентацию Minesweeper и теория кодирования А Гуфан 2014 Скачать презентацию Minesweeper и теория кодирования А Гуфан 2014

minesweeper.pptx

  • Количество слайдов: 29

Minesweeper и теория кодирования А. Гуфан, 2014 Minesweeper и теория кодирования А. Гуфан, 2014

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

Minesweeper Minesweeper

Стартовая расстановка мин задача: расставить k мин в n ячейках очевидный алгоритм: последовательно ставить Стартовая расстановка мин задача: расставить k мин в n ячейках очевидный алгоритм: последовательно ставить случайным образом, каждый раз проверяя, свободно ли очередное поле. ● проверка на каждом шаге ● ожидаемое количество шагов (и проверок!) сложным образом растет с ростом k

Стартовая расстановка мин Стартовая расстановка мин

Стартовая расстановка мин P=0. 01 P=0. 000001 P=0. 0000000001 Стартовая расстановка мин P=0. 01 P=0. 000001 P=0. 0000000001

Стартовая расстановка мин задача: расставить k мин в n ячейках очевидный алгоритм: последовательно ставить Стартовая расстановка мин задача: расставить k мин в n ячейках очевидный алгоритм: последовательно ставить случайным образом, каждый раз проверяя, свободно ли очередное поле. ● проверка на каждом шаге ● ожидаемое количество шагов (и проверок!) сложным образом растет с ростом k ожидаемое количество шагов можно посчитать. проще это сделать, начав с оценки количества заминированных полей после m случайных шагов без проверок на поле из n ячеек обычно такие задачи на практике решаются начиная с выписывания нескольких первых значений. тогда можно попробовать угадать решение и доказать, что оно подходит.

Ожидаемое количество шагов Проверяем: Ожидаемое количество шагов Проверяем:

Ожидаемое количество шагов теперь можно посчитать, сколько приблизительно придется сделать шагов (m), чтобы получилось Ожидаемое количество шагов теперь можно посчитать, сколько приблизительно придется сделать шагов (m), чтобы получилось нужное количество мин (k):

Ожидаемое количество шагов Ожидаемое количество шагов

Стартовая расстановка мин • • вообще-то нужно исследовать немного более подробно: помимо матожидания нужна, Стартовая расстановка мин • • вообще-то нужно исследовать немного более подробно: помимо матожидания нужна, как минимум, дисперсия, чтобы знать, на что можно рассчитывать в реальности. неплохо выглядит вариант “гибридного” вероятностного алгоритма: расставить сначала сколько-то не глядя, а потом аккуратно, уже с проверками, довести количество мин до k. детерминированный алгоритм: • • можно попробовать брать [псевдо]случайную точку напрямую из пространства сочетаний из n по k. для этого введем какое-нибудь отношение порядка и будем выбирать элемент упорядоченного списка сочетаний по его [псевдо]случайно сгенерированному номеру - числу из интервала от 1 до значения длины списка. хранить упорядоченный список нерационально: в нем было бы слишком много элементов, а нужен из них только один. будем вместо этого пытаться преобразовывать сгенерированный [псевдо]случайный номер в сам элемент списка.

Лексикографический порядок 0 10 1 11 2 12 3 13 4 14 5 . Лексикографический порядок 0 10 1 11 2 12 3 13 4 14 5 . . . 6 . . . 7 25 8 26 9 27

Лексикографический порядок 0 00000011 10 00100001 1 00000101 11 0010 2 00000110 12 00100100 Лексикографический порядок 0 00000011 10 00100001 1 00000101 11 0010 2 00000110 12 00100100 3 00001001 13 00101000 4 00001010 14 00110000 5 00001100 . . . 6 0001 . . . 7 00010010 25 10010000 8 00010100 26 10100000 9 00011000 27 11000000

Алгоритм преобразования номера сочетания в само сочетание для начала выясним, чем является номер сочетания Алгоритм преобразования номера сочетания в само сочетание для начала выясним, чем является номер сочетания в последовательности относительно характеристик самого сочетания. номер - это [количество сочетаний, стоящих в списке выше “нашего”] - 1. посчитаем, сколько сочетаний стоит выше - узнаем номер. ● сочетаний, совпадающих с “нашим” левее позиции номер n 1 будет ● совпадающих левее позиции n 2 - ● … итого: штук.

Отступление в сторону: вычисление биномиальных коэффициентов “по определению” вычислять плохо: нужно вычислять факториалы, перемножать Отступление в сторону: вычисление биномиальных коэффициентов “по определению” вычислять плохо: нужно вычислять факториалы, перемножать и делить длинные числа. можно попробовать воспользоваться приближением Стирлинга: в принципе это должно быть довольно быстро. но такими формулами обычно пользуются в задачах вроде асимптотических оценок, где по самой постановке проблемы достаточно этого “O”. нам же нужно получать значения биномиальных коэффициентов. на какую точность можно рассчитывать?

Отступление в сторону: вычисление биномиальных коэффициентов Отступление в сторону: вычисление биномиальных коэффициентов

Отступление в сторону: вычисление биномиальных коэффициентов на самом деле проще всего вычислять так: Отступление в сторону: вычисление биномиальных коэффициентов на самом деле проще всего вычислять так:

Алгоритм преобразования номера сочетания в само сочетание Алгоритм преобразования номера сочетания в само сочетание

Алгоритм преобразования номера сочетания в само сочетание n=7, k=4, №=30 n 1=6, № 1=15 Алгоритм преобразования номера сочетания в само сочетание n=7, k=4, №=30 n 1=6, № 1=15 n 2=5, № 2=5 n 3=3, № 3=2 n 4=2, № 4=0

При чем здесь кодирование 0 00000011 10 00100001 1 00000101 11 0010 2 00000110 При чем здесь кодирование 0 00000011 10 00100001 1 00000101 11 0010 2 00000110 12 00100100 3 00001001 13 00101000 4 00001010 14 00110000 5 00001100 . . . 6 0001 . . . 7 00010010 25 10010000 8 00010100 26 10100000 9 00011000 27 11000000

При чем здесь кодирование 0 00000011 1010 00100001 1 00000101 1011 0010 10 00000110 При чем здесь кодирование 0 00000011 1010 00100001 1 00000101 1011 0010 10 00000110 1100 00100100 11 00001001 1101 00101000 100 00001010 1110 00110000 101 00001100 . . . 110 0001 . . . 111 00010010 110010000 1000 00010100 110100000 1001 00011000 11011 11000000 1 -5 бит 8 бит

Какие проблемы придется решить при разработке формата хранения данных ● что должно храниться в Какие проблемы придется решить при разработке формата хранения данных ● что должно храниться в “заголовке”: ○ длина блока данных? или это константа? ○ количество единиц в кодируемой последовательности ● как разделять поля - экономно, но надежно: ○ префиксное кодирование? ○ специальная последовательность бит? ● - неудобная граница для двоичного числа ○ нельзя ли тут сэкономить? ●. . .

Грубая оценка эффективности сжатия бит данных, из них единиц. Относительное количество последовательностей с заданным Грубая оценка эффективности сжатия бит данных, из них единиц. Относительное количество последовательностей с заданным количеством единиц: Итого в среднем бит на запись количества единиц.

Грубая оценка эффективности сжатия Для каждого конкретного количества единиц закодированная информация будет представлена битами Грубая оценка эффективности сжатия Для каждого конкретного количества единиц закодированная информация будет представлена битами данных. Сколько в среднем?

Грубая оценка эффективности сжатия Для каждого конкретного количества единиц закодированная информация будет представлена битами Грубая оценка эффективности сжатия Для каждого конкретного количества единиц закодированная информация будет представлена битами данных. Сколько в среднем?

Грубая оценка эффективности сжатия ~ итого n 10 2. 871093750 5. 451171875 8. 5 Грубая оценка эффективности сжатия ~ итого n 10 2. 871093750 5. 451171875 8. 5 100 6. 003226989 93. 68925026 99. 7 300 7. 995369400 292. 9057539 301 500 8. 311404717 492. 5188577 501 ● “случайные” данные (а последовательностей, похожих на случайные, большинство) обычно почти не сжимаются. плюс плохой “протокол”. ● приличное сжатие можно получить на достаточно разреженных последовательностях.

Как решают задачи Как решают задачи

Как решают задачи Как решают задачи

Контакты https: //vk. com/solertia_rostov http: //news. studhack. ru/ Контакты https: //vk. com/solertia_rostov http: //news. studhack. ru/