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

Всем привет. начала изучать алгоритмы и структуры. в чем смысл

одно и двусвязных списков? зачем они, если есть обычный список List

42 ответов

16 просмотров

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

Valerya- Автор вопроса
eCats Exchange Support
я раньше думал, что это наркоманы придумали, чтобы...

серьезно? т.е можно спокойно использовать обычные List?

Односвязный или двусвязный список вставляет и удаляет элемент в произвольную позицию за О(1). Но нельзя быстро получить элемент по индексу, только линейным поиском за O(n). List, в с#, на самом деле называется динамическим массивом и наоборот вставляет/удаляет элемент за O(n), но зато имеет быстрый доступ к элементу по индексу за O(1). Двусвязный/односвязный список может быть полезен когда нам часто нужно вставлять и удалять произвольный элемент, или если мы имеем очень большое количество элементов.

Valerya- Автор вопроса
Drawing Dead
Односвязный или двусвязный список вставляет и удал...

понятно. спасибо. с входными данными (n) еще надо разобраться. пока не совсем понятно, как их высчитывать и как сложность считать. сложная очень штука эти алгоритмы и структуры

Oleg Safonov
Пользуется

В виде дерева? В виде бинарного дерева же?

Oleg Safonov
Это разные вообще вещи

Это как посмотреть. Считаю что связный список нужен только как апперетив к деревьям

Егор Шадрунов
Это как посмотреть. Считаю что связный список нуже...

Неважно как смотреть, это абсолютно разные вещи

Ну если честно, кажется что списки связные на практике реально не часто нужны. Может в хеш-таблицах юзаются(но есть хеш-таблицы с "открытой адресацией"), но хеш-таблицы руками никто не пишет. Основная фишка это вставка в любой конец "быстро". И вставка в середину "быстро", но только при условии что сохраняется ссылка на этот узел, а не просто "вставить до / после i-ого" (это будет также "медленно" как с массивом).

Valerya- Автор вопроса
Андрей Москаленко 🇺🇦
Ну если честно, кажется что списки связные на прак...

Я геймдевер. Там вообще непонятно, что пригодится, а что нет

Valerya
Я геймдевер. Там вообще непонятно, что пригодится,...

изучай всё, нет такого понятия "пригодица / не пригодица". Сегодня не пригодица, а завтра пригодица.

для возможности обратного обхода или возврата

L M
для возможности обратного обхода или возврата

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

Oleg Safonov
Как будто по обычному динамическому массиву нельзя...

имея только элемент из массива? нет, нельзя

Суть в алгоритмической сложности и аллокациях. Чтобы добавить в массив новый элемент, надо аллоцировать новую память, копировать туда все значения из старого массива и добавить элемент. В связанных списках просто берешь последнюю ноду и меняешь у него поле с ссылкой на следующий элемент

Phantom
Суть в алгоритмической сложности и аллокациях. Что...

аллоцировать в динамическом массиве надо только периодически (читай очень редко). ты ничего не сказал про двусвязный списки и зачем они

Phantom
Затем же, зачем и односвязанные

только обратно можно траверсить

Phantom
Суть в алгоритмической сложности и аллокациях. Что...

Что-то странное сказали, чтобы добавить элемент в динамический массив, в среднем надо будет не больше O(logN) аллокаций памяти. Не нужно каждый раз аллоцировать новую память и копировать туда все значения.

Phantom
Как ты представляешь O(logN)?

O(f(n)) просто говорит о том что количество операций алгоритма зависит от входных данных как Cf(n)+o(f(n)) -- вторая часть бесконечно малая по сравнению с f(n). Простыми словами при увеличении n f(n) вносит наибольший вклад во время работы алгоритма и определяет характер зависимости кол-ва операций от входных данных

Drawing Dead
O(f(n)) просто говорит о том что количество операц...

Ну как ты при копировании массива получил logn?

Phantom
Как ты представляешь O(logN)?

В динамическом массиве количество аллокаций в среднем O(logN) потому что при отсутствии уже аллоцированной памяти выделяет память в 2 раза большая чем уже есть. То есть если циклом идти и добавлять по одному элементу n раз максимум произойдет logN аллокаций .

Drawing Dead
В динамическом массиве количество аллокаций в сред...

Ты изначально про количество аллокаций был?

Drawing Dead
В динамическом массиве количество аллокаций в сред...

мы же говорим про вставку элемента в начало списка/массива (ну типа худший случай). Для этого надо все элементы массива вправо подвинуть. И для каждой вставки в начало, надо каждый раз весь массив сдвигать. В конец аппендить понятно что проблем не будет. А в связном списке это О(1), хоть в начало, хоть в конец, хоть в середину вставить другой список. Поэтому он нужен при большом количестве вставок в рандомные места (особенно ближе к началу). Ну а если в основном читаем - то как правильно выше заметили, массив будет гораздо быстрее из-за локальности данных

Vladimir Galchenkov
мы же говорим про вставку элемента в начало списка...

Я говорил про аллокации внутреннего хранилища динамического массива.

Drawing Dead
Что-то странное сказали, чтобы добавить элемент в ...

вот тут я наверно не понял про что речь идет. Если в конец добавлять - то не нужно. А если в начало, то нужно

Vladimir Galchenkov
вот тут я наверно не понял про что речь идет. Если...

про автоматическое увеличение свойства Capacity, если List.Count > List.Capacity после добавления нового элемента, Capacity увеличивается в 2 раза. https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.generic.list-1.capacity?view=net-7.0

eCats Exchange Support
А можно пример?

Если можно, то сразу на гитхабе

eCats Exchange Support
Если можно, то сразу на гитхабе

Пример чего? Что кто то юзает linkedlist?

eCats Exchange Support
Ты написал что Пользуется

Ну в гитхабе linkedlist поищите например, уверен, что найдёте кто юзает

eCats Exchange Support
Если можно, то сразу на гитхабе

https://grep.app/search?q=LinkedList%3C&filter[lang][0]=C%23

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта