А как бы вы оптимизировали этот код? #программирование #javascript

preview_player
Показать описание
Полное видео – на канале
Рекомендации по теме
Комментарии
Автор

У многих жеэсеров "оптимизировать" означает добавить больше синтексического сахара, который уменьшит количество строк кода. И почти всегда наплевать на алгоритмитическую сложность решения) Когда они видят обычный цикл for они чуть ли не в обморок падают, словно это что-то супер-низкоуровневое, и не дай бог такому коду в прод попасть.

DmitriiRepnikov
Автор

Я думал будут какие-то улучшения по скорости. А тут буквы экономят. Можно ещё вместо acc писать a😂

alexandervotyakov
Автор

Понятно почему мегагерц становится больше, а комп тормознее

Алексей-цге
Автор

После таких улучшний код читать невозможно. Улучшить код - это не заруинить к хуям его интуитивную четабельность

goshagotye
Автор

Рад, что чувак отметил, что код стало сложнее читать. Это конечно такое себе решение 😂

Calvin_M.
Автор

Тут на входе отсортированный массив, для него убирать дубликаты можно сравнением с "текущим" значением, а не пробеганием по всему массиву.

karelalex
Автор

RemoveDupl = (list) => Array.from( new Set( list ) )

bagrationasatryan
Автор

Для больших объемов дубли можно убирать алгоритмами сортировки больших объемов данных. Отбрасывая из результата случаи равенства. На алгоритмах сортировки удалось сократить количество операций сравнения с 27 до 20 для данного примера.

АлексейВитальевич-
Автор

Правильная оптимизация здесь - это юзать объект с константной сложностью доступа вместо линейного includes, и тогда решение будет линейной сложности а не квадратной. Забыли уточнить на какой грейд этот собес.

danilaalpatov
Автор

всё что нужно сделать: задать вопрос, а какое количество элементов будет? если меньше 100, оставить как есть, накладные расходы на set сожрут всю линейную алгоритмическую сложность.

ilyablinov
Автор

Интервьюер редьюс первый раз видит? Ладно не заметил оставшийся резалт в ифе, но пропустить ретурн аккумулятора?
И в каком месте это вообще улучшение кода?

BOCbMOU
Автор

Ребята, а никого не смутило что в улучшенном варианте нет переменной result и нет возможности сравнить массивы на то есть ли дубликат

SuperMrCrafter
Автор

Надо еще в конец добавить return acc и result заменить на acc

aximas
Автор

зависит от условий, но я так понимаю на js .includes это тоже самое что .Contains, значит будет перебор, который приведет к квадратичной сложности, хз есть ли хештаблицы тут, но первое что приходит в голову они, если можно сортировать массив и размерность не превышает N то сортировка + поиск канидидатов возможны за линейное время

opyat.chetverg
Автор

Если речь именно об оптимизации, то переписать на for of. Reduce конечно в данном случае выглядит красивее, но сути не меняет, а вот цикл быстрее, чем цикл с коллбэками

Неизвестныйпользователь-йв
Автор

Оптимизировать можно:
Двойной цикл идёт n2: перебираем каждый клиент затем перебегаем в инклюдс.
Оптимизация: сортируем массив nlogn
И проходимся один раз сравнивая предыдущее значение со следующим

СергейБ-вю
Автор

Тут работа с сортированный массивом по возрастанию, поэтому можно сравнивать последний добавленный элемент с текущим. Если текущий строго больше предыдущего, то класть в результат.
Внизу ещё есть пример с Set(), мне он понравился.

alexanderartamonov
Автор

Не зная js, но представляя алгоритмы, можно просто перезаписать исходный arr в unordered_map()/u_set(), после чего преобразовать его в list, vector, arr, куда угодно, сложность общаяя составит O(2n), то есть проход - запись в map - n, проход - запись в массив - n.

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

Хз, отсортирован ли входной массив, на видео представлен 1 тесткейс.

В самом js не знаток, если что дайте правки)

ivanmihailichenko
Автор

Создать переменную Set и в цикле туда добавлять значения из массива, тогда останутся только уникальные, читать легко и работать будет намного быстрее, т.к. set.has(item), почти всегда работает за О(1), а arr.includes(item) за в худшем случае за О(n).

MadRichLife
Автор

Массив отсортировать O( nlogn), удалить дубликаты в отсортированом массиве O(n). В итоге понизили асимптотическую сложность с n^2 до nlog(n)

ИльяФёдоров-йж