понедельник, 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) она (муза) сбежать не смогла.
Подходя к эпилогу, хочется плюсов из всех классов программирования и отсутствие минусов этих же классов. Где ж такое найти?
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий