Size: a a a

2020 September 12

I

Igor in learn.java
Эд
Кажется, тут ошибка в худшем времени для LinkedList. Верно? Я про вставку (O(n) должно быть, ведь итерируем по элементам, пока не найдём, куда вставить)
Видимо, тут имеется в виду add(Object o), который добавляет в конец
источник

АК

Андрей Карчевский... in learn.java
Хорошая книжка?
источник

I

Igor in learn.java
Андрей Карчевский
Хорошая книжка?
Тут чат по джаве, а не по андроиду. Лучше в @android_ru спросить
источник

АК

Андрей Карчевский... in learn.java
Igor
Тут чат по джаве, а не по андроиду. Лучше в @android_ru спросить
Извиняюсь, спасибо
источник

Э

Эд in learn.java
Эд
Кажется, тут ошибка в худшем времени для LinkedList. Верно? Я про вставку (O(n) должно быть, ведь итерируем по элементам, пока не найдём, куда вставить)
Я подумал. Мне кажется, автор имел ввиду время вставки уже после поиска
источник

em

ek man in learn.java
JVM преобразовывает весь байт-код сразу в машинный или ЖВМ часть компилирует, а часть интерпретирует?
источник

Д

Дима in learn.java
источник

A

Anton in learn.java
Эд
Кажется, тут ошибка в худшем времени для LinkedList. Верно? Я про вставку (O(n) должно быть, ведь итерируем по элементам, пока не найдём, куда вставить)
Это для однонаправленного списка, поэтому вставка в конец O(n).
Для двунаправленного java.util.LinkedList вставка/удаление в конец O(1), в середину не более O(n/2), т.к. в середину он идёт ближайшим путём от конца или начала.
https://medium.com/@mckenziefiege/arrays-linked-lists-and-big-o-notation-486727b6259b
источник

ПФ

Паша Финкельштейн... in learn.java
Anton
Это для однонаправленного списка, поэтому вставка в конец O(n).
Для двунаправленного java.util.LinkedList вставка/удаление в конец O(1), в середину не более O(n/2), т.к. в середину он идёт ближайшим путём от конца или начала.
https://medium.com/@mckenziefiege/arrays-linked-lists-and-big-o-notation-486727b6259b
Вообще никто не говорит что у однонаправленного списка у нас нет ссылки на последний элемент 😉
источник

A

Anton in learn.java
Паша Финкельштейн
Вообще никто не говорит что у однонаправленного списка у нас нет ссылки на последний элемент 😉
Теория такая непрактичная)
источник

ПФ

Паша Финкельштейн... in learn.java
Обычно теория говорит о направлениях ссылок. А о ссылках на конец там обычно не написано. Но нам и правда могут не давать ссылку до первого добавления в конец, а там уже мы можем её себе сами прихранить ) Но есть нюанс, как обычно
источник

A

Anton in learn.java
Паша Финкельштейн
Обычно теория говорит о направлениях ссылок. А о ссылках на конец там обычно не написано. Но нам и правда могут не давать ссылку до первого добавления в конец, а там уже мы можем её себе сами прихранить ) Но есть нюанс, как обычно
Так можно и многократную вставку в середину в цикле довести примерно O(1), если  вынести операцию поиска отдельно, вернув какой-нибудь неизменяемый снаружи Node. А потом только принимать его в операцию вставки.
источник

DS

Dmitriy Shilnikov in learn.java
Anton
Это для однонаправленного списка, поэтому вставка в конец O(n).
Для двунаправленного java.util.LinkedList вставка/удаление в конец O(1), в середину не более O(n/2), т.к. в середину он идёт ближайшим путём от конца или начала.
https://medium.com/@mckenziefiege/arrays-linked-lists-and-big-o-notation-486727b6259b
O(n/2) разве вообще правильная запись? Чем это отличается просто от O(n)?
источник

VS

Vlad S in learn.java
Dmitriy Shilnikov
O(n/2) разве вообще правильная запись? Чем это отличается просто от O(n)?
Ничем. Иногда пишут О(n/k), смысл как и у О(n)
источник

A

Anton in learn.java
Dmitriy Shilnikov
O(n/2) разве вообще правильная запись? Чем это отличается просто от O(n)?
Я имел ввиду сравнительно. Если n - общее количество элементов в листе, то в односвязном списке (без прямой ссылки на последний элемент) худший случай будет O(n), а в двухсвязном худший случай O(n/2), наклон линии с ростом элементов будет пониже. В более общем смысле запись O (n/2) конечно не имеет большого смысла.
источник

ПФ

Паша Финкельштейн... in learn.java
Dmitriy Shilnikov
O(n/2) разве вообще правильная запись? Чем это отличается просто от O(n)?
неправильная. При константном коэфициенте запись не меняет. n/k — корректно кога у нас ещё есть какая-то переменная k (например если бы линкедлист был поделен на заранее неизвестное количество сегментов k)
источник

A

Anton in learn.java
Паша Финкельштейн
неправильная. При константном коэфициенте запись не меняет. n/k — корректно кога у нас ещё есть какая-то переменная k (например если бы линкедлист был поделен на заранее неизвестное количество сегментов k)
Когда 2 алгоритма, где а одном константно k=1, в другом константно k=2 -  оба O(n), да, поэтому одинаковы, фиг с ним, что один в два раза быстрее)
источник

ПФ

Паша Финкельштейн... in learn.java
Anton
Когда 2 алгоритма, где а одном константно k=1, в другом константно k=2 -  оба O(n), да, поэтому одинаковы, фиг с ним, что один в два раза быстрее)
всё так, O-нотация ничего не говорит о реальной сложности, она только что-то говорит об алгоритмической
источник

DS

Dmitriy Shilnikov in learn.java
Вообще гугл склоняется к тому, что O(n/2) писать всё-таки можно
источник

DS

Dmitriy Shilnikov in learn.java
Но это абсолютно то же самое, что O(n)
источник