Подходит ли PHP для структур данных и алгоритмов?
Для их изучения да, если отказаться от одной привычки: хвататься за array по любому поводу. Массив PHP достаточно гибок, чтобы быть списком, словарём и стеком, и именно это скрывает стоимость каждой операции. Напишите структуры сами, и PHP окажется вполне подходящим языком для рассуждений об алгоритмах, а если вы работаете на PHP, то и естественным языком для собеседования.
Какие классы SPL каким структурам данных соответствуют?
SplStack и SplQueue представляют собой стек и очередь, оба построены на SplDoublyLinkedList; SplMinHeap и SplMaxHeap реализуют кучи; SplPriorityQueue представляет собой max-кучу, упорядоченную по приоритету; а SplFixedArray является массивом фиксированного размера с целочисленными индексами, который расходует меньше памяти, чем array. Обычный array служит вам хеш-таблицей. Классов для дерева, префиксного дерева или графа нет, так что их вы пишете сами, на первом и втором шагах.
Почему array_shift работает медленно для очереди в PHP?
Потому что после удаления первого элемента он перенумеровывает все оставшиеся целочисленные ключи с нуля, а это затрагивает весь массив: очередь на array_shift стоит O(n) за каждое извлечение и квадратичное время, чтобы её опустошить. Используйте SplQueue или храните индекс начала массива и сдвигайте его вперёд. На первом шаге вы сами пишете очередь, и это самый верный способ увидеть разницу.
Устойчива ли сортировка sort() в PHP?
Начиная с PHP 8.0 да: sort(), usort(), asort() и другие функции сортировки сохраняют исходный порядок равных элементов. До версии 8.0 такого обещания не было, поэтому код, зависевший от порядка равных элементов, мог вести себя по-разному в разных версиях. Из восьми сортировок третьего шага сортировка слиянием и сортировка вставками устойчивы, а быстрая и пирамидальная нет; после этого шага вы знаете почему.
Какие курсы этого пути не преподаются на PHP?
Три: динамическое программирование и серия по интервью на Python преподаются на Python, а битовые операции на C++. Они перечислены после шагов, каждый со ссылкой, которая открывает курс на его собственном языке. Таблица мемоизации в PHP представляет собой array с подзадачами в качестве ключей. Одна ловушка при переносе битовых трюков: если оба операнда &, | или ^ являются строками, PHP работает с байтовыми значениями их символов и возвращает строку, поэтому сначала убедитесь, что значения целочисленные.
Нужно ли знать PHP, прежде чем начинать этот путь?
Как минимум функции, массивы, циклы и классы, поскольку узел естественно представить объектом со свойством $next. Если это для вас новое, курс PHP от Coddy сначала бесплатно доведёт вас до этого уровня, а этот путь начинается там, где он заканчивается.