элементов? Или это не регламентировано и там внутри уж как реализуют?
Не происходит, ещё лучше - значение по факту не удаляется а помечается как удаленное, соответственно и память под элемент не очищается
Супер! Спасибо за ответ 👍
ой... я понял чем это обернулось... кажется (я пока не уверен, но похоже на то) из за такой особенности удаления при итерации циклом for по map он проходит через удалённые значения... Так что вся затея с мапой не дала прироста производительности (раньше был массив данных и массив bool в котором хранилось удалены данные или нет, потому что удаление из массива долгое. количество итераций выходило O(n^2) ). Теперь заменил на мапу, в которой удаляться должно за O(1) иии... получил замедление в 3 раза
нет, конечно, он не проходит через удаленные значения
Тогда я не понял почему стало медленнее... Не может же доступ за O(1) иметь настолько большой коэффициент в мапе, что пробежаться через кучу элементов массива с пометкой об удалении - в три раза быстрее Размер данных примерно 80_000 Возможно где то накосячил. Перечитаю ещё пару раз. Спасибо за подсказку, не буду тогда грешить на незаметный для меня проход по удаленным элементам
Может всё-таки LinkedList?
А что профайл говорит?
а причем тут цикл по мапе, как ты из нее удаляешь?
а я пока не знаю как этим пользоваться) надо будет почитать
а вот это работает в 3 раза быстрее, хотя проходится по помеченным как уже добавленные (при помощи flags) точкам: for inside := 0; inside < len(cluster); inside++ { // сделал очередь, будет захватывать по целому кластеру for i, x := range dots { if flags[i] { continue } if cluster[inside].DistanceXYZ(x) < int64Dist { cluster = append(cluster, &dots[i]) flags[i] = true } } }
ну по мапе говорят итерироваться медленнее чем по массиву, насколько медленнее не помню
да, я понимаю что медленнее. Но из массива я не удаляю элементы, хоть и помечаю как обработанные. Так что там O(n^2) а из мапы удаляю, она уменьшается. Должно было получаться O(nlogn) как мне кажется. А выходит в 3 раза медленнее чем по массиву. И на 8_000 и на 80_000 элементов
У тебя поведение по сути одинаковое, не думаю что стоит учитывать условие с continue при расчете сложности
Прям на оф сайте неплохая документация Очень советую ознакомиться, решать такие проблемы станет гораздо проще
спасибо, щас почитаю
а это наверное да. тогда они эквивалентны, только с мапой обращение к элементу дольше
в го он из коробки, если пользутесь IDEA/Goland, то он сразу работает... просто надо жучка запустить и поставить точки останова в нужных местах профилирования
у меня VSCode, там чето с http серверами надо мутить... открыл пример и захотелось закрыть
Обсуждают сегодня