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

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

словами "выталкивании" из "очерди" на списках имеет класс сложности O(1)...O(N), а на массивах O(1). В чём же заключается оптимизированность?

Т.е. то что на массивах добавление элемента имеет O(1..N) тебя не смущает? Оптимизированность в том, что для каждого элемента это происходит не более одного раза в отличии от реализации на массиве, следовательно полное прохождение элемента от начала до конца будет условно стоить O(2), т.е. O(1).

> и при чём тут List.map?

Притом, что при такой трактовке как у тебя им вообще нельзя пользоваться. Ибо там тоже есть List.rev с суммарным объемом в N, т.е. "оверхэд".

> если признаком прерасного являются костыли и дополнительный оверхэд, то да

Костылей ты все еще не показал. Дополнительного оверхэда, кроме, о ужас!, хранения дополнительных ссылок, я пока не увидел.

> let a = ResizeArray<int😠) // очередь
> a.Insert(0,1) // put
> let x = a.[a.Count-1] // pop
> a.RemoveAt(a.Count-1)

Ты вообще понял, что написал? Ты в курсе что твой a.Insert(0,1) имеет сложность O(N)? O(N), а не O(1..N)! Это не считая того, что это нихера не иммутабельная структура.

> это больно, если мозги отравлены - легко запутаться в вышеприведенном коде.

Ты умудрился запутаться в вышеприведенном коде. А ты еще ничего иммутабельного не сделал.

> Сомнительные авторитеты твои преподы. Насколько я знаю, 90% "преподов" "программирования" - идиоты, 9% - патологические кретины. И то, что они доказывают, вовсе не является аксиомой не зависимо от наличия пены у рта. Если препод не догоняет, что динамический массив - это есть и стек, и очередь - то препод однозначно профнепригоден ))

В данный момент "патологический кретином" и "идиотом" выставляешь себя ты. То что динамический массив можно юзать как стек и очередь нихрена не значит, что он для этого будет эффективен. Возможно, ты путаешь динамический массив с Deque (хотя почему я должен думать за тебя, если ты даже не потрудился нормально прочитать мои замечания?), которую можно юзать вышеуказанным способом, и которая часто реализуется на динамическом массиве.

1. Динамический массив имеет: O(1..N) за вставку в конец, O(N) за вставку в начале, О(1) за удаление в конце (O(1..N) если экономим память), O(N) за удаление в начале.
2. Двунаправленная очередь на динамическом массиве: O(1..N) за вставку в конец, O(1..N) за вставку в начале, О(1) за удаление в конце (O(1..N) если экономим память), O(1) за удаление в начале (O(1..N) если экономим память).
3. Стек на основе массива: O(1..N) за вставку, O(1) за извлечени.
4. Стек на основе списка: O(1) за вставку, О(1) за извлечение.
5. Очередь на основе массива: O(1..N) за вставку, O(1) за извлечение.
6. Очередь на основе двух стеков (на основе списков): O(1) за вставку, O(1..N) за извлечение, причем из-за "одноразовости" переноса стека для большинства задач считается как O(1). Здесь основная претензия - это размазанность структуры данных по куче, что ввиду ссылочных данных уже не так критично.

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

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

2 ответов

19 просмотров

Ребята (к обоим участникам дискуссии), давайте не будем переходить на личности.

== на массивах добавление элемента имеет O(1..N) нет, Ёмкость массива растёт экспоненциально при добавлении, поэтому при добавлении N эллементов требуется перенести всего лишь N * Ln(n), а не каждый раз всё подряд переносить == Притом, что при такой трактовке как у тебя им вообще нельзя пользоваться. Ибо там тоже есть List.rev с суммарным объемом в N, т.е. "оверхэд" глупости же. map связан с обходом коллекции и ни какого отношения к добавлению/удалению элементов из неё не имеет. И в массиве сложность обхода O(1), а в списках твоих O(N) Дальше лень читать. Было бы проще, если бы ты прежде разобрался в том, о чём пыешься спорить.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта