Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Подбор мнемонических цитат для автомобильных и телефонных номеров

Anna | 31.05.2014 | нет комментариев

Порой бывает трудно запомнить цифровую либо цифро-буквенную последовательность, но если при помощи простого правила, строка стихотворения, выученного в детстве может быть преобразована к этому числу — всё станет легче. В этой статье способами Монте-Карло сравниваются итоги подбора таких отрывков при помощи 2-х разных методов кодирования чисел.

Приведу пример: Если кодировать цифры согласными буквами, то всякое слово либо предложение соответствует целому числу. Обыкновенно выбирают дальнейший метод кодирования 1-р, 2-д, 3-т, 4-ч, 5-п, 6-ш, 7-с, 8-в, 9-м (потому что 9 это “много”). Тогда слова “добрый мой приятель” соответствуют числу 219513. Но это несколько неудобно, от того что без особой подготовки не получается стремительно выбросить непотребные буквы, тем не менее, “добрый мой приятель” позабыть достаточно трудно, что неизменно дозволит вам находясь в мирной атмосфере припомнить число 219513. И это крайне пленительно, от того что само по себе число это является крайне абстрактным и может запросто перепутаться с другими такими же абстрактными числами.

Существует достаточно много информации по мнемотехнике, тут я усердствовал не изобретать велосипедов, а применять вероятности подбора текста, которые достаточно затруднительно применять без помощи вычислительной системы.
На каждый случай определение из Википедии: Мнемоника (греч. искусство запоминания), мнемотехника — общность особых приёмов и методов, облегчающих запоминание требуемой информации и увеличивающих объём памяти путём образования ассоциаций (связей). Замена абстрактных объектов и фактов на представления и представления, имеющие визуальное, аудиальное либо кинестетическое представление, связывание объектов с теснее имеющейся информацией в памяти разных типов для облегчения запоминания.

В этом случае, сравнение абстрактному комплекту цифр отрывка текста наполняет его образами и разрешает упростить его запоминание. Как теснее говорилось, идея заключается в том, Дабы подобрать данный текст механически. Это всё безусловно вестимые вещи, я нисколечко не претендую на то что их выдумал, тем кто заинтересуется самой мнемотехникой рекомендую почитать учебники [1].

Кодирование по первым буквам

Изначальная идея заключалась в том, Дабы испробовать подобрать цитату из стихотворной части школьной программы, которая бы соответствовала заданному автомобильному номеру, то есть некоторой случайной последовательности буква-три_цифры-две_буквы (обыкновенный номер без кода региона). При этом предполагалось, что первая буква даёт предисловие первому слову, всякая из трёх цифр кодируется согласной, всякая из которых также даёт предисловие слову и последние две буквы — ещё два слова. Притом в русском автомобильном номере не могут содержаться всякие буквы, применяются только 12 из них это: а, в, с, е, н, т, м, о, к, р, у, х. Было взято несколько больших стихотворений: Евгений Онегин, Полтава, Руслан и Людмила, Ромео и Джульета басни Крылова. В процессе обзора генерируется 1000 случайных номеров, для которых подбирается цитата из этих произведений
Был написан дальнейший скрипт:

#!/usr/bin/php
<?php
$path="school/";
$letters = array("а", "в", "с", "е", "н", "т", "м", "о", "к", "р", "у", "х");
$numbers = array("о", "р", "д", "т", "ч", "п", "ш", "с", "в", "м");

// приобретение случайного элемента из массива (различие от array_rand в том, что возвращается значение, а не ключ)
function rn($a) { return $a[rand(0, count($a)-1)]; }

// приобретение длины и максимально допустимой генерируемой последовательности
function getmax($handle, $required) {
	$result=array(); $max = 0; $queue = array();
	fseek($handle, 0);
	while (($buffer = fgets($handle, 4096)) !== false) {
		$words=explode(" ", $buffer);
		for ($j=0;$j<count($words); $j  ) {
			// обрезаем лишние символы и понижаем регистр
			$w = mb_strtolower(trim($words[$j], " t.,nr0123456789:-!;?"), "UTF-8");
			if (!$w) continue;
			$queue[]=$w;

			$avail = min(count($required), count($queue));
			$match = $avail; 
			for ($k=0;$k<$avail;$k  ) {
				if (mb_strpos($queue[$k], $required[$k], 0, "UTF-8")!==0) {
					$match = $k; break;
				}
			}

			if ($max<$match) $max=$match;
			if ($match===count($required)) {
				$result[]=array_splice($queue, 0, $match);
				return array($max, $result);
			}

			if (count($queue)>=count($required))
				array_shift($queue);
		}
	}
	return array($max, $result);
}

$plates = array();
for ($i=0;$i<1000;$i  ) $plates[]=array(rn($letters), rn($numbers), rn($numbers), rn($numbers), rn($letters), rn($letters));

$files=scandir($path);

for ($i=0;$i<count($files);$i  ) { 
	if (is_dir($path.$files[$i])) continue;

	$handle = @fopen($path.$files[$i], "r");

	if ($handle) {
		$cnt=array(0,0,0,0,0,0,0); $max = 0; $avg = 0; $best = array();

		for ($j=0;$j<count($plates);$j  ) {
			list($c, $seq) = getmax($handle, $plates[$j]);
			if (($max && $max<$c) || !$max) { $max = $c; $best=array(implode("", $plates[$j])=>$seq);}
			else if ($max===$c) $best[implode("", $plates[$j])]=$seq;
			$cnt[$c]  = 1;
			$avg  = $c;
		}
		$avg/=count($plates);
		print $files[$i]."t".$avg;
		for ($j=0;$j<count($cnt);$j  ) print "t".$cnt[$j];
		print "n";
		print_r($best);

	    fclose($handle);
	}
}

Если немножко прокомментировать код, то все поступающие слова складываются в очередь, которая растёт не огромнее длины подбираемой последовательности. Длина максимального совпадения запоминается. Таким образом выясняется наивысшее число букв от начала, которые дозволено закодировать при помощи некоторого текста.

Итоги следующие:

Наименование Среднее 0 1 2 3 4 5 6 Объём
Басни Крылова 2.434 0 35 530 403 30 2 0 83Кб
Евгений Онегин 3.237 0 0 120 549 306 24 1 1.1Мб
Полтава 2.507 0 17 510 424 47 2 0 85Кб
Ромео и Джульетта 2.821 0 36 239 598 122 5 0 219Кб
Руслан и Людмила 2.617 0 68 359 469 97 6 1 138Кб

Дозволено сказать, что эти итоги меня не обрадовали, получается, что только для 2-х номеров из 1000 получилось подобрать цитату. Посмотрим на эти две цитаты: м052рк — “мой. Они, предвзятою душой Ревнуя к”; о817вс — “От воспалённого Руслана Сокрылись внезапно среди”. Некоторая логика в этих фразах безусловно присутствует, но незаконченность и обрывчатость делает их запоминание не слишком простым делом. Тем не менее, тесты дозволили сказать, что даже на основе этих текстов в большинстве случаев получается генерировать последовательность для трёх букв.

Безусловно же я заинтересовался: что происходит когда тексты становятся огромнее? Быть может возникает большее число фрагментов, из которых теснее дозволено предпочесть. Для дальнейшего теста я предпочел из библиотеки Мошкова: два завета библии в синодальном переводе, все большие стихи Бодлера, все романы Достоевского, “Хоббит, либо Туда и обратно”, все романы Пушкина в стихах, каждого Шекспира, все романы Толстого. Были получены следующие итоги:

Наименование Среднее 0 1 2 3 4 5 6 Объём
Старый завет 3.09 0 0 188 557 235 17 3 1.1Мб
Новейший завет 3.126 0 13 180 498 289 17 3 1.5Мб
Достоевский 4.053 0 0 10 206 526 237 21 15Мб
Толкиен 3.12 0 10 148 581 234 27 0 807Кб
Пушкин 3.234 0 0 114 565 295 25 1 1.2Мб
Бодлер 2.943 0 4 231 594 160 11 0 461Кб
Шекспир 4.489 0 0 0 49 474 416 61 64Мб
Толстой 3.96 0 0 8 236 555 190 11 11Мб

Самих цитат получилось достаточно много, Дабы не утомлять читателя я не буду приводить их все, только упомяну, что их нрав остался бывшим, какой-то незаконченно-таинственный: в488ом — “Вот что, Ваня верь одному: Маслобоев”, т380тт — “три тысячи, вскричал он, три тысячи”, м081не — “мне от вас рабство удовольствие. Есть”. Прочитав их все посещает мысль о каких-то гаданиях, которые устраивают по книгам (когда открывают случайную страницу, читают случайную строку и пытаются это как-то интерпретировать в рамках собственной жизни). Но я таких целей не ставил.


График зависимости среднего от десятичного логарифма объёма (по Y — среднее, плюс-минус стандартное отклонение, а по X — логарифм объёма используемого текста)

В тезисе, такой вид зависимости дозволено было угадать, тут немножко выбиваются только два томика Библии, а в остальном среднее растёт пропорционально логарифму объёма.

Кодирование по длинам

Первое что приходит в голову это то что метод кодирования слишком много текста оставляет вне рассмотрения, то есть для цифр берутся только 10 букв и для букв 12, остальные слова только разрывают цепочки. Безусловно, дозволено придумать другие методы кодирования, которые применяют все буквы либо правда бы только согласные. Эти методы описаны в литературе, но моя идея заключалась в том, Дабы сделать легкой в применении инструмент, такой Дабы пользователь не ломал голову над тем как же соответствует фраза этому номеру, какие необходимо выбрасывать буквы, а какие рассматривать, в отвратном случае дозволено было бы использовать кодирование до первой важной буквы, оно даёт однозначность, но не комфортно для человека. Пришла идея кодировать цифры числом букв в слове. При таком кодировании появляется задача представления нуля, но пока не будем на этом останавливаться. Для того Дабы сравнить я провёл серию тестов на том же комплекте и по тем же правилам (код примерно тот же, по этой причине листинг был бы одним повторением):

Наименование Среднее 0 1 2 3 4 5 6 Объём
Басни Крылова 2.831 0 96 203 490 197 13 1 83Кб
Онегин 3.497 0 96 85 166 536 113 4 1.1Мб
Полтава 2.808 0 96 231 459 199 13 2 85Кб
Ромео и Джульетта 3.149 0 96 116 377 371 34 6 219Кб
Руслан и Людмила 2.94 0 96 178 443 258 23 2 138Кб

Дозволено сказать, что обстановка значительно отменнее, только сразу же настораживает идентичное число 96 в столбике “1”, тут посчитаны номера, для которых нашлось слово на первую букву, но не нашлось на первую цифру. Это безусловно номера начинающиеся на нуль, около 100 таких номеров ещё в столбцах 2 и 3, как дозволено подметить, их не огромнее 85. Пример получившейся цитаты: в325нм — “вам: рад бы… право не могу”. Обрывчатость в случае со стихами дозволено возместить тем, что приводить цитату от начала строки, пользователю понадобится добавочно запомнить где в стихотворении начинается номер, скажем, приведённая цитата должна выдаваться как: “Клянусь вам: рад бы… право не могу.” либо даже совместно с предыдущей строкой: “Ах, милостивый рыцарь, Божусь вам: рад бы… право не могу”. Но так теснее перестаёт быть очевидным предисловие фразы. Если запоминать предисловие фразы, то дозволено и запомнить расположение нулей отдельно. Допустимо кому-то покажется такая идея измывательством, но я считаю её применимой по крайней мере.
Использование этой идеи даёт следующие итоги:

Наименование Среднее 0 1 2 3 4 5 6 Объём
Басни Крылова 3.444 0 0 114 426 367 88 5 83Кб
Онегин 4.26 0 0 2 93 596 261 48 1.1Мб
Полтава 3.413 0 0 132 414 367 83 4 85Кб
Ромео и Джульетта 3.791 0 0 39 298 508 143 12 219Кб
Руслан и Людмила 3.611 0 0 83 356 445 99 17 138Кб
Старый завет 4.189 0 0 5 126 585 243 41 1.1Мб
Новейший завет 4.292 0 0 3 83 581 285 48 1.5Мб
Достоевский 5.019 0 0 0 0 208 565 227 15Мб
Толкиен (Хоббит) 4.123 0 0 2 155 587 230 26 807Кб
Пушкин 4.251 0 0 3 94 593 269 41 1.2Мб
Бодлер 3.946 0 0 18 214 591 158 19 461Кб

По этим данным дозволено предположить, что для случайного номера с вероятностью 22% дозволено подобрать соответствующую цитату из Достоевского, теснее не нехорошо. Цитаты безусловно получаются крайне многозначительными, как и в прошлом случае: в725вр — “весело глядит за нашей весёлой работой”, м582то — “мои слова казалось её тронули, она”, м385нс — “между тем каким-то чудом необыкновенное сходство”, к514нт — “кровавой битве и день настал толпы”.

А что если генерировать не для автомобильных номеров, а для телефонных? Сказано — сделано:

Наименование Среднее 1 2 3 4 5 6 7
Басни Крылова 4.145 0 23 270 387 214 71 35
Онегин 5.248 0 0 9 260 347 242 142
Полтава 4.131 0 16 293 385 193 76 37
Ромео и Джульетта 4.608 0 0 138 374 286 146 56
Руслан и Людмила 4.349 0 11 212 381 256 93 47

Эти итоги разрешают предположить, что для шестизначного случайного номера с вероятностью примерно 40% найдётся соответствующая цитата из произведения “Евгений Онегин”, а это чай стихи, которые значительно славней к запоминанию (не для всех скорее каждого, но для большинства всё же, я верю).

Другие методы

Какие ещё вероятности остались за кадром: генерация текстов, а именно генерация соответствующих слов либо предложений определённой конструкции (с необходимым числом букв либо ещё как) в тезисе это теснее давным-давно сделано и без компьютеров. Указанный в литературе учебник предлагает для всякого числа от 0 до 1000 какое-то слово, которое теснее подобрано автором, но, к сожалению, такой метод не даёт вероятности запоминать крупные числа, от того что образы невозможно соединять, это по словам автора приводит к их стиранию. Оно и ясно, всё начинает наслаиваться и так дальше. Вот скажем легкой метод: дозволено закодировать цифры распространёнными ассоциациями — 3 (от 03) — доктор, 7 — топор (из-за формы) и скажем 5 — пятница. В этом случае подобрав для всякой цифры по три образа (для всякого расположения) все трёхзначные числа дозволено закодировать дюже яркими историями как бы “375 — доктора зарубили в пятницу”, но так дозволено запомнить только дюже малое число чисел, потому что всё начнёт мешаться, необходимо проводить добавочные параллели, Дабы запомнить когда именно зарубили доктора в данный раз.

Завершение

Алгорифм генерации по длинам слов реализован в приложении, которое распознаёт номера авто на мобильных устройствах и является некоммерческой разработкой just for fun. Помимо того, такой подбор осуществляется на сайте YaZapomnil [2].

Мне показался достаточно увлекательным тот факт, что многообразие текстов касательно таких необычных метрик как последовательность чисел букв либо последовательность первых букв слов растёт при увеличении объёма текста. Притом итоги достаточно отлично ложатся на прямую. При увеличении текста повышается вероятность выбора между фрагментами, это допустимо улучшит их качество.

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

Ссылки

 

  1. Козаренко В. А. Учебник мнемотехники, 2002, электронная публикация
  2. Подбор цитаты по числу yazapomnil.ru/n/

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB