KP>Подсчитать — нет. Подумать какой из алгоритмов/контейнеров будет оптимальным в данный момент или придумать как решить ту или иную алгоритмическую задачу — очень часто. И вот для этого "очень часто" знание, хотя бы приблизительное, того, как устроены контейнеры, или какова сложноть у алоритмов необходимо. Хотя, возможно, это потому, что я вообще не занимаюсь ни бухгалтерией, ни документоообротом.
Посыл верный (что иногда требуется выбрать структуру данных), но вывод неверный (про необходимость знать внутреннее устройство контейнера или про сложность конкретного алгоритма).
Потому как достаточно просто взять табличку с перечислением оных контейнеров али алгоритмов — и на ее основании выбрать нужный. Предположим, программист не знает, какой асимптотической сложностью обладает LinkedList, но ему нужен контейнер, в который часто проводятся вставки и удаления, по которому часто итерируются, но произвольный индексный доступ не требуется. По табличке прошелся, выбрал нужный — пошел дальше.
Индусы так работают. Работают успешно — в том смысле, что продукты выпускаются, бизнесу выгодно.
Здравствуйте, B0FEE664, Вы писали:
BFE>Обычно, всё-ж оценивают размеры обрабатываемых данных и временные рамки для их обработки, а не алгоритмическую сложность. Вот, например, кто-нибудь рассуждает так: "Окно в первом прототипе будет обрабатывать 5 сообщений. Количество сообщений по мере развития приложения может увеличится до сотни. Если мы напишем switch(номер сообщения), то алгоритмическая сложность составит O(n). Но ведь есть алгоритм бинарного поиска! Его алгоритмическая сложность меньше. Что-ж, заведём массив хранящий пару (номер сообщения, обработчик), отсортируем его по номеру сообщения и будем применять бинарный поиск! Тааак... теперь надо выбрать правильный алгоритм сортировки..."
Ага. Видел таких гениев, что за деревьями не видят леса. Убъют две трети времени проекта на оптимизацию того, что в итоге либо не окажет никакого влияния на производительность, а то и будет вообще выкинуто, и прохлопают очевиднейшее бутылочное горлышко, в котором наговнокодят даже не O(n^2), а O(n^n). Специалисты блин, и все как один с дипломами, гномиков с закрытыми глазами считают и сортировки пальцами левой ноги на бумажке пишут.
М>да-да. хэш таблицы. поиск по словам post hashmap dos рулит. очень интересная дыра. потому что никому и в голову не пришло просчитать наихудший сценарий развития событий.
ну я минимум 10 лет назад понимал возможность таких DoS
ПМ> было бы интересно взглянуть на компилятор, который сам конвертирует свитчи в двоичный поиск, потому что что-то я сомневаюсь в целесообразности такой операции.
L>Ага. Видел таких гениев, что за деревьями не видят леса. Убъют две трети времени проекта на оптимизацию того, что в итоге либо не окажет никакого влияния на производительность, а то и будет вообще выкинуто, и прохлопают очевиднейшее бутылочное горлышко, в котором наговнокодят даже не O(n^2), а O(n^n). Специалисты блин, и все как один с дипломами, гномиков с закрытыми глазами считают и сортировки пальцами левой ноги на бумажке пишут.
Но ведь это же хорошо! Для нас с тобой, как минимум
Здравствуйте, SkyDance, Вы писали:
L>>Ага. Видел таких гениев, что за деревьями не видят леса. Убъют две трети времени проекта на оптимизацию того, что в итоге либо не окажет никакого влияния на производительность, а то и будет вообще выкинуто, и прохлопают очевиднейшее бутылочное горлышко, в котором наговнокодят даже не O(n^2), а O(n^n). Специалисты блин, и все как один с дипломами, гномиков с закрытыми глазами считают и сортировки пальцами левой ноги на бумажке пишут.
SD>Но ведь это же хорошо! Для нас с тобой, как минимум
Да как-то задалбывает бороться с ветряными мельницами, если честно.
Здравствуйте, _DAle_, Вы писали:
_DA>Не надо шокироваться. List — это просто упорядоченный набор элементов. И у него обычно две реализации: array и linked list. В терминологии на русском языке часто под словом "список" подразумевается linked list из-за этого и часто возникающая путаница.
Здравствуйте, B0FEE664, Вы писали:
MTD>>Количество шагов может быть небольшим, а время выполнения огромным по сравнению с поставленными временными рамками. Так что это важно. BFE>Нет. Это значит, что для разных задач нужны разные алгоритмы.
Молодец, мозг включился
BFE>если никаких проблем, значит и цикл можно развернуть по тому же принципу.
Можно в некоторых случаях.
BFE>А причем тут цикл обработки 100 гигабитного потока?
SD>>Do not fight it. Embrace it! (C) L>Так тоже можно. Жаль только, что эти Выбегаллы сильно портят имидж профессии.
Что, простите, портят?
Имидж, простите, профессии _ПРОГРАММИСТА_?!
Не, я еще понимаю, ореол таинственности и мифичности, но чтоб "имидж".
Имид — это, вот, скажем, в России — работа сантехника.
Или, например, в США — юриста. Это имидж. А программист...
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, MTD, Вы писали:
BFE>>>И как, интересно, может помочь оценка алгоритмической сложности, когда надо отобразить список фамилий размером в 4 миллиарда в листбоксе? MTD>>Ну вот как, как, такое может придти в голову? BFE>Как, как ... Из практики!
MTD>> Я даже не об алгоритмах говорю, а о несчастных юзерах.
BFE>Что с ними не так? Их последнее время расплодилось столько, что в 32 бита не влезают.
Да уж... Может чем нибудь другим стоит заняться?
MTD>> Однозначно теперь первый вопрос про О-большое, ну после виртуального деструктора
BFE>Ну причём тут О-большое
Сразу позволяет понять стоит общаться дальше или нет. После этой темы я это хорошо понял.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>Здравствуйте, Злобастик, Вы писали:
З>>Я вообще никогда в жизни не слышал о таком понятии, как "алгоритмическая сложность". Нигде — ни в институте, ни на работе, ни в книжках, ни в интернетах, ни от коллег.
MP>Еще скажите, что на матане вы O-нотацию не проходили.
Это 10 лет назад было. Про O-нотацию ничего не помню. Возможно, на первом курсе это и было, но так как специальность моя радиотехническая, учили нас больше волновой математике, теории вероятности и проч.
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, Sorc17, Вы писали:
S>>"Спасибо, мы вам перезвоним в ближайшее время?"
ПМ>Я не устраиваю собеседований в онлайне на rsdn, но когда мне так отвечают, я интересуюсь, как именно устроен ArrayList. В 100% случаев не отвечают. Дальше, как правило, следует еще пяток неверных ответов по основам используемой платформы, пяток неверных ответов по поводу специфичных вещей, нужных для проекта и, как правило, "спасибо, мы вам перезвоним в ближайшее время". Поэтому я и говорю, что всякие вычислительные сложности — это индикаторы. Если по ним незачёт, то дальше можно не продолжать, с высокой вероятностью ничего не потеряете, но сэкономите время.
Здравствуйте, мыщъх, Вы писали:
MTD>>>... или что проход по массиву n элементов имеет сложность O(n) ?!! S>>Зачем это знать? Написал foreach и всё. Какая разница какая там у него сложность? М>ну как бы последняя крупная дос дыра как раз и связана с тем, что для передачи аргументов web-программисты используют hashmap без понимания как оно работает и пацаны придумали как валить мощные сервера даже со слабого модема на 33,600. если в худшем случае у нас квадратичная сложность, то это означает, что покупкой оборудования проблему не исправить.
Если бы кто эти сервера валил. На каждый второй заходишь и он минуту думает, что показать. Навигация по сайту превращается в муку — стоит ли тратить своё время, чтобы узнать что есть на этом сайте, или лучше посмотреть сайты конкурентов? И почти на каждом сайте вначале будет тупое видео, хорошо, если звук не на полную громкость выставлен.
Здравствуйте, vpchelko, Вы писали:
_DA>>Не надо шокироваться. List — это просто упорядоченный набор элементов. И у него обычно две реализации: array и linked list. В терминологии на русском языке часто под словом "список" подразумевается linked list из-за этого и часто возникающая путаница.
V>Лучше уж тогда избегать путающих вопросов.
Там цель отсеять, поэтому он такие вопросы специально накапливает.