Здравствуйте, VladD2, Вы писали:
VD>Вот анализ от Gemini (прямо из гугл-поиска):
VD>Оценка производительности кода: Квадратичная сложность O(n²)
VD>
VD>Данный код имеет квадратичную сложность O(n²) в худшем случае, где 'n' — количество элементов в списке keys.
VD>...
VD>
мдеее..
VD>Пепел анализом я его заставил найти код Remove.
Зачем? Базовые ADT не нуждаются в коде — это же первый семестр АЯП...
VD>И в общем, я с его выводами согласен. Хотя твой приведенный фрагмент и O(N), но он же ведь явно где-то еще вызывается.
Безусловно вызывается
VD>И код явно дерьмовый. Какие ref (причем без указания на то нашелся узел или нет) и "false ==". LinkedList какой-то. В общем, дичь какая-то.
Ты LinkedList никогда не видел? У меня был выбор: 1) и передавать старый , и возвращать новый 2) сделать через ref.
Сделал через ref потому что там пофигу, изменила ли функция ключ, или нет. Важно толь то, есть ли хотя-бы какой-нибудь.
VD>Почему, действительно, не использовать HashSet или словарь?
Потому что HashSet более тяжеловесный — по крайней мере он опирается на хэш, который тут нафиг не упал, и добавление O(1) он не гарантирует. Потому что заранее известно, что ключи уникальны и как-либо гарантировать их уникальность не нужно.
VD>Покажи код взывающий эту функцию.
Пока не могу — кода на работе. Завтра покажу.
VD>Вот этот же index он не из воздуха берётся? Его же по этому списку вычисляют? Ну вот тебе и низкая производительность.
Это индекс очередного символа в source — само собой там символы из source итерируются.