170 похожих чатов

Всем привет! Подскажите, может ли происходить перехэширование мапы при удалении

элементов? Или это не регламентировано и там внутри уж как реализуют?

18 ответов

37 просмотров

Не происходит, ещё лучше - значение по факту не удаляется а помечается как удаленное, соответственно и память под элемент не очищается

Павлик-Ливаткин Автор вопроса
Royal Cat
Не происходит, ещё лучше - значение по факту не уд...

ой... я понял чем это обернулось... кажется (я пока не уверен, но похоже на то) из за такой особенности удаления при итерации циклом for по map он проходит через удалённые значения... Так что вся затея с мапой не дала прироста производительности (раньше был массив данных и массив bool в котором хранилось удалены данные или нет, потому что удаление из массива долгое. количество итераций выходило O(n^2) ). Теперь заменил на мапу, в которой удаляться должно за O(1) иии... получил замедление в 3 раза

Павлик Ливаткин
ой... я понял чем это обернулось... кажется (я пок...

нет, конечно, он не проходит через удаленные значения

Павлик-Ливаткин Автор вопроса
Daniel Podolsky
нет, конечно, он не проходит через удаленные значе...

Тогда я не понял почему стало медленнее... Не может же доступ за O(1) иметь настолько большой коэффициент в мапе, что пробежаться через кучу элементов массива с пометкой об удалении - в три раза быстрее Размер данных примерно 80_000 Возможно где то накосячил. Перечитаю ещё пару раз. Спасибо за подсказку, не буду тогда грешить на незаметный для меня проход по удаленным элементам

а причем тут цикл по мапе, как ты из нее удаляешь?

Павлик-Ливаткин Автор вопроса

а я пока не знаю как этим пользоваться) надо будет почитать

Павлик-Ливаткин Автор вопроса
Артём Лазаренко
а причем тут цикл по мапе, как ты из нее удаляешь?

а вот это работает в 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 } } }

Павлик Ливаткин
а вот это работает в 3 раза быстрее, хотя проходит...

ну по мапе говорят итерироваться медленнее чем по массиву, насколько медленнее не помню

Павлик-Ливаткин Автор вопроса
Артём Лазаренко
ну по мапе говорят итерироваться медленнее чем по ...

да, я понимаю что медленнее. Но из массива я не удаляю элементы, хоть и помечаю как обработанные. Так что там O(n^2) а из мапы удаляю, она уменьшается. Должно было получаться O(nlogn) как мне кажется. А выходит в 3 раза медленнее чем по массиву. И на 8_000 и на 80_000 элементов

У тебя поведение по сути одинаковое, не думаю что стоит учитывать условие с continue при расчете сложности

Павлик Ливаткин
а я пока не знаю как этим пользоваться) надо будет...

Прям на оф сайте неплохая документация Очень советую ознакомиться, решать такие проблемы станет гораздо проще

Павлик-Ливаткин Автор вопроса
Артём Лазаренко
У тебя поведение по сути одинаковое, не думаю что ...

а это наверное да. тогда они эквивалентны, только с мапой обращение к элементу дольше

Павлик Ливаткин
а я пока не знаю как этим пользоваться) надо будет...

в го он из коробки, если пользутесь IDEA/Goland, то он сразу работает... просто надо жучка запустить и поставить точки останова в нужных местах профилирования

Павлик-Ливаткин Автор вопроса
Максим Федоров
в го он из коробки, если пользутесь IDEA/Goland, т...

у меня VSCode, там чето с http серверами надо мутить... открыл пример и захотелось закрыть

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта