Реальные внедрения “классических алгоритмов”

Вы можете счастливо использовать Redux или MobX, они в порядке.

Я предлагаю укротить состояние от Робина Виеруха: https://roadtoreact.com/course-details?courseId=TAMING_THE_STATE

Есть книга и курс. Он показывает разные способы обработки состояния React.

9
задан Dan Rigby 2 May 2012 в 19:41
поделиться

10 ответов

Знание или способность понять эти алгоритмы важно, это инструменты Вашей торговли. Это не означает, что необходимо смочь реализовать* через час из памяти. Но необходимо смочь выяснить то, что преимущества использования красно-черного дерева в противоположность нормальному несбалансированному дереву так, можно решить, нужно ли Вам оно или нет. Необходимо смочь судить фитнес алгоритма для решения проблемы.

Это могло бы звучать слишком школьным-masterish, но эти "классические алгоритмы" не были изобретены для предоставления вопросов об экзамене студентов колледжа, они были изобретены, чтобы решить проблемы или изменить к лучшему текущие решения, точно так же, как массив, связанный список или стек являются стандартными блоками, чтобы записать, что программа так является некоторыми из них. Точно так же, как в математике, куда Вы перемещаетесь от дополнения и вычитания к интеграции и дифференцирования, это усовершенствованные методы, которые помогут Вам решить проблемы, которые являются там.

Они не могли бы быть непосредственно применимыми к Вашим проблемам или ситуации с работой, но в конечном счете знание их поможет Вам как профессиональному разработчику программного обеспечения.

Для ответа на вопрос я сделал реализацию* недавно для игры.

8
ответ дан 4 December 2019 в 05:59
поделиться

Существует ли преимущество для нашего dayjobs в знании этих алгоритмов и структур данных, когда существуют тонны библиотек, платформ и API, которые дают Вам ту же функциональность?

Библиотека не знает то, что Ваша проблемная область и не сможет, выбрал корректный алгоритм, чтобы сделать задание. Именно поэтому я думаю, что важно знать о них: затем можно сделать верный выбор алгоритмов для решения проблемы.

15
ответ дан 4 December 2019 в 05:59
поделиться

Ну, кто-то должен записать библиотеки. При работе в отображающейся компании-разработчике программного обеспечения я реализовал Dijkstra, а также деревья двоичного поиска, B-деревья, деревья не, деревья книги и скрытые модели Маркова.

Кроме того, если все, что Вы хотите, является единственным 'известным' алгоритмом, и Вы также хотите свободу специализировать его и оптимизировать его, если это становится очень важным для производительности, включая целую библиотеку походит на плохой выбор.

5
ответ дан 4 December 2019 в 05:59
поделиться

Существует ли преимущество для понимания Ваших инструментов, вместо того, чтобы просто знать, что они существуют?

Да, конечно, существует. При взятии тривиального примера разве Вы не думаете, что существует преимущество для знания, что различием является Список (или эквивалентная реализация динамического массива Вашего языка) и LinkedList (или эквивалент Вашего языка)? Довольно важно знать, что у каждого есть постоянное время произвольного доступа, в то время как другой линейно. И каждый требует копий N, если Вы вставляете значение посреди последовательности, в то время как другой может сделать это в постоянное время.

Разве Вы не думаете, что существует преимущество для понимания, что тот же алгоритм сортировки не всегда оптимален? Это для почти отсортированных данных, quicksort сосет, например? Наивно просто вызов Вида () и надежда на лучшее могут стать смехотворно дорогими, если Вы не понимаете то, что происходит под капотом.

Конечно, существует много алгоритмов, в которых Вы, вероятно, не будете нуждаться, но несмотря на это, просто поняв, как они работают, может помочь себе придумать эффективные алгоритмы для решения другого, не связанного, проблемы.

8
ответ дан 4 December 2019 в 05:59
поделиться

На моем предыдущем рабочем месте, которое было компанией EDA, мы реализовали версии алгоритмов Чопорного и Dijsktra, непересекающихся структур данных набора,* поиск и т.д. Все они имели значение реального мира. Я полагаю, что это зависит от проблемной области - некоторые домены более интенсивны алгоритмом и немного меньше.

Однако существует тонкая грань для обхода - я не вижу бизнес-оснований для перереализации Дженерики Java или STL. Во многих случаях стандартная библиотека лучше, чем "изобретение колеса". Чем больше Вы около своего базового приложения, тем больше может быть необходимо реализовать алгоритм учебника или структуру данных.

4
ответ дан 4 December 2019 в 05:59
поделиться

Мы используем реализацию собственной разработки p-генератора-случайных-чисел от Knuth SemiNumeric как помощь в некоторой статистической обработке

4
ответ дан 4 December 2019 в 05:59
поделиться

* для pac клона человека. Мне потребовались недели для реального получения, но по сей день я считаю это вещью красоты.

2
ответ дан 4 December 2019 в 05:59
поделиться

Если Вы никогда не работаете с критическим по отношению к производительности кодом, считаете себя удачливыми. Однако я считаю этот сценарий нереалистичным. Проблемы производительности могли произойти где угодно. И затем необходимо знать, как решить ту проблему. Очевидно, просто знание нескольких названий алгоритма не достаточно здесь – если Вы не хотите реализовать их всех и испытать их один за другим.

Нет, при знании (по крайней мере часть из) внутренние работы различных алгоритмов важны для измерения их достоинств и недостатков и для анализа, как они обработали бы ситуацию.

Очевидно, если существует библиотека, уже реализовав точно, в чем Вы нуждаетесь, Вы невероятно удачливы. Но давайте столкнемся с ним, даже если существует такая библиотека, использование его часто не абсолютно просто (по крайней мере, интерфейсы и представление данных часто должны быть адаптированы), таким образом, все еще хорошо знать, что ожидать.

2
ответ дан 4 December 2019 в 05:59
поделиться

Я должен был реализовать некоторые классические алгоритмы от числового анализа. Было легче записать мое собственное, чем соединиться с существующей библиотекой. Кроме того, я должен был записать вариации на классические алгоритмы, потому что типичный случай не соответствовал моему приложению.

Для классических структур данных я почти всегда пользуюсь стандартными библиотеками, такими как STL для C++. Одно время недавно, когда я думал STL, не имело структуры, в которой я нуждался ("куча"), я прокрутил свое собственное, только чтобы сделать, чтобы кто-то указал почти сразу, что я не должен был делать этого.

2
ответ дан 4 December 2019 в 05:59
поделиться

Классические алгоритмы я использовал в фактической работе:

  • Топологический вид

  • Красно-черное дерево (хотя я признаюсь, что только должен был реализовать вставки для того приложения и оно только привыкло в прототипе). Это привыкло для реализации 'заказанного dict' структура типа в Python.

  • Приоритетная очередь

  • Конечные автоматы различных видов

  • Вероятно, один или два других я не могу помнить.

Относительно второй части вопроса:

Понимание того, как алгоритмы работают, их сложность и семантика, привыкает на довольно регулярной основе. Они также сообщают дизайну систем. Иногда нужно сделать вещи, включающие парсинг или обработку протокола или некоторое вычисление, это немного умно. Наличие практического знания того, что делают алгоритмы, как они работают, насколько дорогой они и где можно было бы найти их лежащий вокруг в коде библиотеки, имеет большое значение для знания, как постараться не изобретать велосипед плохо.

2
ответ дан 4 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: