Цель: протестировать и сделать вывод о том, какой алгоритм "Анаграмма" является самым быстрым, на основе списка алгоритмов, работающих с наборами данных разного размера. Хотя некоторые алгоритмы, протестированные ниже, работают за время O(n), а другие за O(n log n), мы уже можем предопределить, какие алгоритмы окажутся лучше. Цель этого поста — протестировать его и увидеть доказательства в реальном времени за наносекунды.

Когда мы узнаем о временной сложности в начале нашей карьеры инженеров, мы склонны соблюдать равенство. Когда получается, что список алгоритмов n1, n2,… имеет одинаковую сложность, скажем, O(n), мы не тратим время на дальнейшее тестирование производительности. Предполагается, что nX и nY будут работать одинаково. Это работает в теории, но не обязательно на практике.

Многие поддадутся проверке истинной производительности любой равной сложности только из-за их равенства. Чтобы не спойлерить слишком много, скажу, что один из алгоритмов O(n) работает в 10 раз быстрее, чем другой алгоритм O(n). Это может быть беспрецедентным открытием, но мы должны это понять. Изучив это, мы сможем протестировать наш код, проверить свою производительность, расширить свои знания и стать лучшими инженерами по производительности.

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

Анаграмма — слово или фраза, образованная путем перестановки букв другого слова, например кино, образованного от слова iceman.

Алгоритмы, которые мы будем тестировать:

  • Сортировка Javascript()
  • Heapsort
  • Хэш-карта
  • Для цикла

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

Для каждой приведенной ниже строки набора данных, s1, я решил воспроизвести ее, назвав s2, а затем превратить ее в анаграмму, назовем ее b2. . Поскольку s1 и b2 являются анаграммами, я использовал обе эти строки в качестве параметров для проверки производительности каждого из моих алгоритмов. Кроме того, я добавил тестовый пример, заменив одно значение в b2, названное c2,где c2 не равно или анаграмму на с1. Это также даст мне более точное представление о времени, которое требуется для запуска каждого из моих алгоритмов.

Небольшая строка набора данных, которую мы будем использовать:

`cinemaasdfqwertyuiopcinemaasdfqwertyuiopcinemaasdfqwertyuiopcinemaasdfq…