Кто и когда использует бинарные деревья и другие структуры данных?

Здравствуйте. Существуют разные структуры данных (связные списки, деревья, хэш-таблицы) и разные алгоритмы (quick sort, heap sort и тд). Я разработчик php+js и не пользуюсь ими, но как я понимаю, в основе языка лежат все эти структуры данных и алгоритмы. Например, функция sort внутри использует какой-то такой алгоритм, а массивы - это на самом деле хеш-таблицы.
Есть ли какой-то язык программирования или область, где нужно самостоятельно строить бинарное дерево или писать скрипт поиска в массиве или эти знания нужны только в академических целях, чтоб понимать как все работает?
Во всех известных мне ЯП уже есть встроенные функции для этого. Даже в "низкоуровневом" C есть функция qsort.
Спасибо.
  • Вопрос задан
  • 717 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Иногда вам может понадобится что-то не совсем стандартное. Например, возможность быстро вставлять элемент на k-ое место в структуре и находить, что лежит на k-ой позиции. Это делается деревом по неявному ключу, но, по моему, ни один язык не предоставляет стандартной структуры для этого.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@12rbah
Есть ли какой-то язык программирования или область, где нужно самостоятельно строить бинарное дерево или писать скрипт поиска в массиве или эти знания нужны только в академических целях, чтоб понимать как все работает?

От языка программирования это не зависит, т.к. это все обычно реализуется стандартными средствами, попытка написать свои реализации грозит наличием в них ошибок. Свои реализации обычно пишут под конкретную задачу, например ast дерево популярно для написания парсеров, https://habr.com/ru/company/mailru/blog/323242/ тут самописная реализация хэш-таблиц.
Ответ написан
Комментировать
@KoreanGuy
из личных примеров: в игре жанра Line Tower Defence с полем из шестиугольников нужно было реализовать поиск пути. Стандартный механизм Юнити был явным оверкиллом, поэтому вручную написал простой алгоритм, который использовал граф. Второй пример буквально недельной давности: имея набор из 11 футболистов и зная какие позиции они предпочитают, определить наиболее вероятную расстановку на поле, чтобы можно было в UI нарисовать. Через деревья реализовал. А связные списки вообще повсеместно используются.
Ответ написан
Комментировать
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Assembler
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Я разработчик php+js и не пользуюсь ими

Тебе кажется. На самом деле обычный js-объект и есть хэш-таблица. Ну и ассоциативные массивы в php тоже.

Я разработчик php+js и не пользуюсь ими

Вот чтобы такие глупости и нужно знать о них.

Есть ли какой-то язык программирования или область, где нужно самостоятельно строить бинарное дерево или писать скрипт поиска в массиве или эти знания нужны только в академических целях, чтоб понимать как все работает?

В принципе любой, если стандартная реализация не подходит.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev
software engineer
Есть ли какой-то язык программирования или область, где нужно самостоятельно строить бинарное дерево или писать скрипт поиска в массиве

Assembler, C (не С++)
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
как я понимаю, в основе языка лежат все эти структуры данных и алгоритмы.
Неправильно понимаете, хотя они и используются.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы