понедельник, 25 мая 2009 г.

Минимакс

Чем же бить? Ладьею - страшновато, Справа в челюсть - вроде рановато, Неудобно - первая игра. Володя. Сейчас не будет про теорию игр, альфа-бета отсечения и ретроспективный анализ. Будет про рекорды и антирекорды (минимумы и максимумы) некоторых видов программирования. Рассматриваются промышленное программирование против спортивного. Я еще как класс выделяю академическое программирование, но при сравнении почти не встретится. Рекорды спортивного программирования: - количество вложенных циклов = 13. Задачка как раз про теорию игр: на поле 4х4 выколоты 2 клетки. На поле расположено 2 фигурки из тетриса (которые буквой "Г"). За ход обязательно нужно поднять свою фигурку и переместить на новое положение. Проигрывает тот, кто не может сделать хода. Так вот, авторское решение (поляки вроде) содержало 13 (!) вложенных циклов 1..4. 4^13 = одному хорошему числу :) . Хотя, вроде, ретроспективой можно проще. - наибольшая размерность массива(количество измерений) = 5. Задачка была как производная баяна про небоскреб и кидание яиц, только посложнее (вход такой же, число объектов и этажей, оптимизировать надо кое что посложнее). Придумали только лень, где состояние задается кортежом из 5 элементов. Еще и напряги с памятью, пришлось хранить в 5-ти мерном массиве (даже 2 массива, так как еще булевский на "посещение" состояния), на хранение хеша не хватило бы. Как проще, я не знаю. Авторской решение такое же. - Встретилась вот такая конструкция: a[b[c[d[e]]]++] = x; С точностью до \alpha-редукции. Если будете реализовывать суффиксный массив по классической работе Манбера и Майерса, то что-то похожее у Вас встретится. У нас это реализовывал Артем (так как он первый вкурил эту работу), у него получилось a[b[c[d]]++][e] = x; Хотя в одной академической работе и MSU SE коде я встречал первый вариант. Антирекорды промышленного программирования: - в метод передается 29 параметров (почти все long). - класс с 380 + n методов - метод с 80 + n локальными переменными. Если Вы думаете, что это шутка, или в крайнем случае "индийский код", то, увы, это реальность. Сразу вспоминается про отрубание рук за воровство, запрет эвтаназии, мораторий на смертную казнь и УК РФ 105. Хочется всего, и наблюдать, медленно и мучительно... Еще раз, это реальный код одной довольно большой компании ( > 10000 человек). У них в списке заказчиков есть Аэрофлот, Федеральная налоговая служба РФ, Центральный банк Российской Федерации, Visa International. Так что не удивляетесь, если что не так. В том же списке есть и Coca-Cola, MS, Sun. Недолго видимо им осталось. В промышленности последние лет 15 рулит бизнес-логика (как я всегда говорю, бизнес минус логика). Все приложение - это одно большое ЕСЛИ. Правда, заказчик и сам не знает, что ему надо. И все ЕСЛИ поступают на вход динамически. Если бы (опять если) заказчик все знал как ему надо, то это было бы не сложнее простого конечного автомата. Выходит чуть посложнее. Все-таки за автоматным программированием (Шалытовское) в промышленности будущее. В промышленности (из-за отсутствия ясности у заказчика) тестов нет и быть не может. В спорте тесты есть :) . В академическом программировании тестов тоже нет, там уже формальное доказательство. По деньгам - в другом порядке. В промышленности они есть и довольно много, в спорте есть порядка 10 человек в мире, которые смогут жить на призовые (не то что бы у них потребности маленькие, призовых только на 10 человек хватит). У академиков деньги не платят за алгоритмы. Хотя, если Вы решите 3n + 1... Короче, спорт - это что-то среднее между промышленностью и академиками. Академики - это тот же спорт, только раз в полгода и на неделю. Когда муза в голову ударит. У Эрдеша (правда, он чистый математик, не cs) она (муза) сбежать не смогла. Подходя к эпилогу, хочется плюсов из всех классов программирования и отсутствие минусов этих же классов. Где ж такое найти?

Комментариев нет: