Почему javascript разработчик обязан знать базовые алгоритмы и структуры данных



Так уж получается, что я принимаю участие в найме сотрудников в разные организации уже лет так 5. И у меня собралась печальная статистика, > 80% жабаскриптеров не знаю даже базовых алгоритмов и структур данных. Сейчас я попробую их(Вас) убедить что эти знания крайне нужны.

Пример 1: массивы и подсчёт количества элементов

Давайте представим, что наш фронтэнд получил ответ от бэка со списком всех сотрудников, вида:

[
  { id: 1,  name: 'Паша', salary: 859, age: 49 },
  { id: 2, name: 'Маша', salary: 200, age: 20 },
...
]

И нам на фронте нужно получить количество человек с зарплатой > 300 тугриков. Стандартно это делается так:

let count = 0;
for(let item of employee)
  if( item.salary > 300 )
    count ++;

console.log('Result:', count);

В этом примере, нам всегда приходится обходить все элементы массива, сложность алгоритма On, причём и в среднем и в лучшем, и в худшем случае.

И всё тут нормально, если количество записей небольшое, а выполнять эту процедуру нужно ровно 1 раз. Если же эту процедуру нужно выполнять несколько раз, например, по запросу пользователя, то код выше можно легко оптимизировать:

let sortedBySalary = employee.sort( (a,b) => a.salary - b.salary );

function findCountMore1(arr, value) {
  for(let index=0; index<arr.length; index++)
    if( arr[ index ].salary > value )
      return arr.length - index;
    
  return 0;
}

console.log('Result:', findCountMore1(sortedBySalary, 300));

Сортируем массив по зарплате. А уже в сортированном массиве достаточно найти первый элемент удовлетворяющий нашим условиям, ведь все следующи тоже 100% будет их удовлетворять.

В этом примере, сложность в среднем On/2, в лучшем случае O1, то есть первый же элемент может удовлитворить критериям и дальнейший обход массива останавливается. В худшем получим On, так же как и в прошлом примере, это в случае, если все элементы не удовлетворяют критериям.

Пример 2: массив+хэштаблица=быстрый поиск

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

let hashIndex = {};
for(let item of employee) {
  if( !hashIndex[ item.age ] )
    hashIndex[ item.age ] = [];
  
  hashIndex[ item.age ].push(item);
}

console.log('Result:', hashIndex[ 42 ]);

После этой подготовки мы сможем находить всех сотрудников по возрасту за время O1, это на порядок быстрее, чем стандартным перебором через Array.find, который всегда проходится по всем элементам.

Так к чему это я?

А к тому, что самые базовые знания алгоритмов и структур данных, могут ускорить Ваш код в разы.


Сообщество: AWS

Комментариев(0)


Всего: 0 комментариев на 0 страницах

Ваш комментарий будет анонимным. Чтобы оставить не анонимный комментарий, пожалуйста, зарегистрируйтесь



Сообщества