hakmem



Предыдущая | Следующая

hakmem /hak «mem/, сущ. Легендарная коллекция красивых математических и программных хаков, собранная сотрудниками лаборатории искусственного интеллекта MIT. «HAKMEM» – это шестибуквенное сокращение от «hacks memo» (хаки на память). Некоторые хаки из этой коллекции представляют собой очень полезные методы программирования, мощные теоремы или еще не решенные интересные задачи, но большую часть можно отнести в разряд математических или компьютерных тривиальностей. Ниже мы приводим с небольшими изменениями некоторые из них (в скобках указаны авторы):Ха 41 (Джен Селемин): Существует ровно 23,000 простых чисел, каждое из которых меньше чем 218. Ха 46 (Рич Скропел): Более вероятным раскладом по мастям в бридже является комбинация 4-4-3-2, а не 4-3-3-3, (последнюю комбинацию можно •    назвать более равномерной). Связано с тем, что природа не любит одинаковых чисел, и по закону термодинамики всякая система находится не в состоянии минимума энергии, а в состоянии минимума упорядоченной энергии, т.е. стремится к максимуму энтропии. ? Ха 81 (Рич Скропел): Сосчитаем магические квадраты пятого порядка (т.е. все варианты заполнения квадрата пять на пять числами от 1 до 25, чтобы при суммировании элементов по столбцам, строкам и диагоналям получалось одно и то же число). Получим около 320 миллионов магических квадратов, не считая вариантов, полученных с помощью отражения или поворота вокруг ,    оси. Хак 154 (Билл Госпер): Миф о том, что якобы конкретный язык программирования является машинно-независимым, легко опровергается вычислением на этом языке суммы степеней двойки. Если результат повторяется с перио-^дом = 1 и знаком +, это значит, что вы работаете на знакозависимой машине. Если результат повторяется с периодом 1 при знаке -, вы работаете на машине с дополнением до двух. Если результат повторяется с периодом больше ( единицы, включая самый первый, Вы работаете на машине с дополнением до единицы. А если результат повторяется с периодом больше единицы, не , включая начало, то ваша машина не является двоичной, и по виду машинного представления результата вы можете догадаться об используемой системе счисления. Если вы выходите за границы памяти, значит, вы работаете в строковой системе или системе со встроенным типом bignum. Если арифметическое переполнение является фатальной ошибкой, значит, что какая-то недоучившаяся фашистская свинья пыталась сделать систему программирования 11 машинно-независимой. Но если при переполнении возникает прерывание, то однозначно можно говорить о машинно-зависимой системе. Рассмотрим