Есть такая замечательная книга Кнута, как думаете стоит ли потратить время на ее изучение? Я мельком посмотрел в нее, автор на мой взгляд учит больше математике, чем программированию. Не слишком ли глубоко копнул автор в математические понятия, чтобы считать эту книгу полезной для программеров?
Вот в том и проблема, а нужно ли ее так копать, на мой взгляд эта книга больше для исследователей, чем для программеров. Программерам нужно просто пользоваться уже известными наработками, а разработкой новых алгоритмов должны разбираться специально обученные люди.
Это справочник. Надо просто знать, что там есть, и пользоваться, чтобы не изобретать каждый раз заново велосипеды с квадратными колесами. По крайней мере, в http://www.wasm.ru/forum/viewforum.php?id=17 на половину топиков можно смело отвечать: читай Кнута, и закрывать.
neutronion Для использования все эти формулы действительно не нужны. Программисту главное -- правильно усвоить выводы (какие алгоритмы в каких условиях быстрее и т.п.). Впрочем, нелишним будет разобрать хотя бы часть математики, чтобы лучше понять, например, как можно оценить производительность алгоритма. А вот это -- грубейшая ошибка. Это быдлокодеры алгоритмы не создают, а тупо кодируют кем-то спущенные сверху. Искусство же программиста как раз в том и заключается, чтобы создавать новые алгоритмы или творчески приспосабливать уже существующие к конкретным задачам.
Некоторые новые алгоритмы без серьезного уровня знания математики невозможно оценить. Создать новые алгоритмы без серьезного знания математики, тоже трудновыполнимая задача. Это значит мы приходим к тому, что этим должны заниматься серьезные математики.
Более того, в математике тоже существуют специализация, кто-то занимается топологией, кто-то алгоритмами. В общем как говорил К. Прутков Нельзя объять необъятное. Поэтому и создал этот топик, как работать с сией замечательной книгой, только как справочником, тогда глубокие знания математики нафиг не нужны, как исследователь, тогда программированием уже будет заниматься недосуг.
Что делает программер? 1. Зарабатывает деньги - книга навряд ли нужна. 2. Пишет программы - книга будет полезной, даже может натолкнуть на интересные идеи и решения.
neutronion Все просто в 60-тых годах 20 века. Компьютеры назывались электронными вычислительными машинами сокращенно ЭВМ. Программисты в те времена занимались именно математическими вычислениями на компьютере. Более того скорость компьютеров было несколько килогерц и памяти всего ничего от нескольких байт до нескольких килобайт. А когда ставишь себя в рамки и годами оттачиваешь умение работать в этих рамках, то тогда и рождается искусство. Кнут начал писать свою книгу именно в 60-тых и тогда это было актуально. С развитием вычислительной технике это стало не так актуально. Некто не мог даже предположить что электроника так будет развиваться. Оказалось что развитие вычислительной технике приняло экспоненциальною зависимость. Каждые полтора года число транзисторов удваивалось. Рост частоты процессоров и объема памяти были тоже экспоненциальными. Сразу стало понятно что нет надобности заботиться о том сколько байт съедает программа или сколько времени тратит программа. Достаточно было оценить сложность алгоритма в предельном состояние O и тетта большая. Уже реже требуется вылизывать алгоритмы до байта. Так что смело можно найти любую другую книгу по алгоритмам где меньше математике. В 80-тых годах появляются персональные компьютеры и становится проще купить новый компьютер. До этого времени старались вылизывать программы, так как компьютеры стоили очень много денег. А в 80-тых произошло резкое удешевление. Но до 2000 года Кнут не теряет своей актуальности. А да и не стоит забывать что это всё-таки искусство, а не обычное программирование. В 90-ых интенсивно развивает интернет. И в это время появляется новый термин "экстремальное программирование". Программистам не требуется каждый раз набирать код достаточно просто скопировать с сайта. А потом уже доводить до ума. Но практика показывает что чем больше развивается техника тем более сложные задачи находятся для неё. Так что оптимизацией программист занимается, но уже в меньшей степени. Проблема в том что компьютеры развиваются очень быстро, а программисты как писали свои программы так и пишут. Единственно на что можно наедятся, а то тот что в недалёком будущем изобретут искусственный интеллект.
Недавно наблюдал такую картину. На одном из форумов. Один молодой программист искал как распараллелить алгоритм. В результате ему порекомендовали место где можно обзавестись кластером и человека который поможет запустить его задачу на кластери. А задачка простая. Так вот ему было предложено сменить алгоритм, а он не захотел. А зря. То мог бы запросто обойтись без кластера. У него алгоритм был O(n^2), а можно было заменить на другой алгоритм со скоростью O(n*log(n)) При этом у него было n=2^32. Вот и почувствуйте разницу в скорости несколько месяцев против нескольких минут. Это совсем не так. Есть литература как делаются изобретения можете почитать. Правда я придерживаюсь другой теории. 1) Чтобы изобрести нужно много знать - т.е иметь обширные знания в различных областях. 2) Хорошо знать существующие алгоритмы. Ну и самое лучшее когда выполняется оба условия.
"Товарищи христиане, есть такая книга "Библия", что думаете о ней?" Кнута читать нужно. И не страшно, что бОльшую часть книги не понимаешь - даже без глубоких математических познаний книга будет очень полезна (хотя стремиться к полному пониманию нужно). Использование исключительно известных наработок - удел быдлокодеров. Что будет делать такой кодер, если столкнется с задачей, для которой еще не придумали подходящего решения? Не скажи. RLE, LZ77/LZSS, Bubblesort - чтобы самостоятельно придумать и обосновать подобные алгоритмы, серьезный матан не нужен Да и более сложные алгоритмы можно сочинить, если очень нужно. Реализация, придуманная "нематематиком", наверняка будет далеко не оптимальной, но все же будет! Угу. Сейчас ресурсы меряются гигагерцами и гигабайтами, казалось бы, можно спокойно писать через ООПу, жрать память без ограничений - и все будет летать. Однако программы по-прежнему тормозят. Тупо взять и скопипастить код, написанный неизвестно кем, неизвестно для чего, с неизвестными требованиями и багами? Причем говнокодеры встречаются чаще, чем программисты? Нет уж, спасибо.