Re[4]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 07:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Философ, Вы писали:


Ф>>WAT!??? Удаление из связного списка ноды — O(n)?????

VD>А что ты хотел для односвязенного списка? В нём хранится только ссылка на следующий элемент.

Я хотел, чтобы удаление из односвязного списка выглядело так:

[a -> b -> c]
[a -> c]
b -> null
Когда-то я писал АТД руками — в делфе не было стандартных контэйнеров. И я делал именно так.
Удаление из XY-связного списка ноды было O(1).


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


Ну как бы константная вставка в произвольное место (туда, где у тебя нода смотрит — на самом деле немало. Тебе ведь ничего не мешает делать обёртки вокруг имеющихся АТД, ничего не мешает иметь ноды XY-связного списка в качестве полей, аггрегирование то никто не отменял.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[4]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 07:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>https://github.com/rsdn/CsNitra/

VD>Сам парсер и примеры (тесты). Сначала только один, потом еще два.

Я чуть-чуть позже посмотрю что там и как — у меня тут слегка завал образовался.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[4]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 07:57
Оценка:
Здравствуйте, VladD2, Вы писали:

У меня времени немного, поэтому отвечаю пока на это небольшое подмножество реплик.

Ф>>Потому что HashSet более тяжеловесный — по крайней мере он опирается на хэш, который тут нафиг не упал, и добавление O(1) он не гарантирует. Потому что заранее известно, что ключи уникальны и как-либо гарантировать их уникальность не нужно.


VD>Чушь полная. HashSet и Dictionary очень даже лехковесный. Данные там хранятся в одном списке, а доступ идет за ~константное время. Для современных процессоров LinkedList вообще не лучший выбор, так как ухудшает локальность памяти (узлы шире и могут располагаться в разных участках памяти).


Влад, а подумать!?
Специально для тебя эксперимент провёл. Сам бы этого не делал — и так знал.


  код
using System;
using System.Collections.Generic;

namespace ADT_SpeedTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<string>();
            var llist = new LinkedList<string>();
            var hashSet = new HashSet<string>();

            const int maxI = 256;
            const int maxJ = 20;
            const int total = maxI * maxJ;

            var array = new string[total];
            for (int j = 0; j < total; j++){
                array[j] = j.ToString("D7");
            }

            Console.Write("  ");

            for (int i = 0; i < maxI; i++){
                int max = 20 * (1 + i);
                Console.Write(max);
                Console.Write("  ");

                var sw = System.Diagnostics.Stopwatch.StartNew();//B
                for (int j = 0; j < max; j++){
                    list.Add(array[j]);
                }
                sw.Stop();
                Console.Write(sw.ElapsedTicks);
                Console.Write("  ");

                sw.Restart();//C
                for (int j = 0; j < max; j++){
                    llist.AddLast(array[j]);
                }
                sw.Stop();
                Console.Write(sw.ElapsedTicks);
                Console.Write("  ");

                sw.Restart();//D
                for (int j = 0; j < max; j++){
                    hashSet.Add(array[j]);
                }
                sw.Stop();
                Console.Write(sw.ElapsedTicks);
                Console.Write("  ");
                //===================================================

                sw.Restart();//E
                for (int j = 0; j < max; j++){
                    list.Remove(array[j]);
                }
                sw.Stop();
                Console.Write(sw.ElapsedTicks);
                Console.Write("  ");

                sw.Restart();//F
                for (int j = 0; j < max; j++){
                    llist.RemoveFirst();
                }
                sw.Stop();
                Console.Write(sw.ElapsedTicks);
                Console.Write("  ");

                sw.Restart();//G
                for (int j = 0; j < max; j++){
                    hashSet.Remove(array[j]);
                }
                sw.Stop();
                Console.Write(sw.ElapsedTicks);

                Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
}


  попробуй угадать, где кто (.net 4.8, AnyCPU, Release, w/o debug)


Ф>>Это индекс очередного символа в source — само собой там символы из source итерируются.


VD>Вот именно! И там явно перебор еще один. А два вложенных цикла — это O(n²)


Это если ты итерируешься по одному и тому же. Пример: если сравнивать все символы со всеми символами текста, то будет квадрат, если сравнивать символы ключей с символами текста, то будет произведение кол-ва символов ключей на кол-во символов текста. Это очень разные множества.
Вот, прикинь, у тебя может быть 20 — 30 ключей (мой случай) и ещё много букав в тексте.
допустим ключей 20, по 4 символа
текст — 100М

Тогда:
O(n²) — 100М*100М
O(n*m) — 100М*20*4
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 26.11.2025 8:49 Философ . Предыдущая версия . Еще …
Отредактировано 26.11.2025 7:57 Философ . Предыдущая версия .
Re[5]: Задолбал Dick Seek со своей "невнимательностью"
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.25 14:59
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Влад, а подумать!?


Хороший совет. Подумай.

Ф>Специально для тебя эксперимент провёл. Сам бы этого не делал — и так знал.


А на фиг мне твоя подтасованная пенесометрия?

Давай вот твой парсер разберем. Покажи полный алгоритм и я расскажу как его ускорить отказавшись от LinkedList.

А это все бесполезная подтасовка.

Ф>Это если ты итерируешься по одному и тому же. Пример: если сравнивать все символы со всеми символами текста, то будет квадрат, если сравнивать символы ключей с символами текста, то будет произведение кол-ва символов ключей на кол-во символов текста. Это очень разные множества.


Я вообще не понимаю зачем измерять удаление из хэш-табицы и зачем удалять из списков, да еще с поиском по значению и из середины.

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

Ф>Вот, прикинь, у тебя может быть 20 — 30 ключей (мой случай) и ещё много букав в тексте.


20-30 это вообще ни о чем. Вот когда их хотя бы 300К, тогда можно что-то видеть.

Но у тебя реально начинается квдрат, так как ты и внутри своего алгоритма удаления цикл сделал, и используешь эту функцию в каком-то цикле. А два вложенных цикла это уже O(n²).

Ф>допустим ключей 20, по 4 символа

Ф>текст — 100М

Ф>Тогда:

Ф>O(n²) — 100М*100М
Ф>O(n*m) — 100М*20*4

Я тебе говорю. Покажи свой код. У тебя потери совсем не там где ты их ищешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 15:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я тебе говорю. Покажи свой код. У тебя потери совсем не там где ты их ищешь.


Да не могу я, блин, пока — там код сейчас даже в некомпилябельном состоянии, я тут загружен под завязку — ту задачу отложил, сейчас строчки в гриде раскрашиваю....
Там код ещё не дописан: всё как всегда непросто — нужно встроиться в существующую систему, которая написана впопыхах, кое-как. С моим кодом там пока нет проблем, потому что мой код там пока ещё не работает.
Закончу с раскрасками и прикручиваниями — распакую тот код.

VD>А на фиг мне твоя подтасованная пенесометрия?


Даже не знаю как это комментировать. Влад, это я слобал на скорую руку, перед тем как убегать в садик. Тащемта поэтому там заголовков стобцов нет, и легенда типа "ищите сами". Мне такой хренью, как подтасовка результатов для форумных срачей некотогда заниматься. Даже если бы мог, то не захотел бы.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[6]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 15:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я тебе говорю. Покажи свой код. У тебя потери совсем не там где ты их ищешь.


Я к чат-ботам полез до того, как проблемы возникли — пытался понять, как делать так, чтоб всё окончательно не умерло.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Задолбал Dick Seek со своей "невнимательностью"
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.25 16:53
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Я хотел, чтобы удаление из односвязного списка выглядело так:


Ф>[a -> b -> c]

Ф>[a -> c]
Ф>b -> null
Ф>Когда-то я писал АТД руками — в делфе не было стандартных контэйнеров. И я делал именно так.
Ф>Удаление из XY-связного списка ноды было O(1).

1. АТД и АлгТД — это не одно и то же. АлгТД — алгебраическое. АТД — абстрактный.
.
2. Удаление из односвязанного списка в общем случае o(n). В нем нужно перебрать все элементы до удаляемого и пересоздать впередиидущий элемент (так как в нем находится ссылка на удаляемый).

Ф>Ну как бы константная вставка в произвольное место (туда, где у тебя нода смотрит — на самом деле немало. Тебе ведь ничего не мешает делать обёртки вокруг имеющихся АТД, ничего не мешает иметь ноды XY-связного списка в качестве полей, аггрегирование то никто не отменял.


Мешает. У сего есть цена. И как показывает практика почти всегда можно найти более производительное решение в котором нет места двусвязанному списку. У односвязанного списка в преимуществах то, что это неизменяемая (imutamle) структура данных, да еще и алгебраический тип. У хэш-таблиц и сетов наивысшая скорость поиска по ключам. У List<T> лучшее попадание в кэш при переборах и индексном обращении.

Я вот зная все характеристики LinkedList ни разу в жизни его не применил. Где-то он плох в плане многопоточной обработки. Где-то из-за промахов в кэш. Где-то есть более быстрые структуры данных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Задолбал Dick Seek со своей "невнимательностью"
От: T4r4sB Россия  
Дата: 26.11.25 17:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А она в цикле выше, где и зарыт O(n²)


Не вижу квадрата в данном коде.
Итерацию по списку вижу, с помощью итератора. Удаление элемента это O(1)
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[4]: Задолбал Dick Seek со своей "невнимательностью"
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.25 19:15
Оценка:
Здравствуйте, T4r4sB, Вы писали:

VD>>А она в цикле выше, где и зарыт O(n²)


TB>Не вижу квадрата в данном коде.


Ну так читать еще научись. Я тебе жирным выделю основное.

Это код не полный. Это часть какого-то алгоритма парсинга.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Задолбал Dick Seek со своей "невнимательностью"
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.25 19:18
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Да не могу я, блин, пока — там код сейчас даже в некомпилябельном состоянии, я тут загружен под завязку — ту задачу отложил, сейчас строчки в гриде раскрашиваю....


Ну тогда просто опиши задачу и приведи исходные данные, которые нужно обрабатывать.

Ф>Там код ещё не дописан: всё как всегда непросто — нужно встроиться в существующую систему, которая написана впопыхах, кое-как. \


Ну так может начать с рефакторинга?

Ф>С моим кодом там пока нет проблем, потому что мой код там пока ещё не работает.

Ф>Закончу с раскрасками и прикручиваниями — распакую тот код.

Раскрасками? Ты код что ли подсвечиваешь?

Ф>Даже не знаю как это комментировать. Влад, это я слобал на скорую руку, перед тем как убегать в садик. Тащемта поэтому там заголовков стобцов нет, и легенда типа "ищите сами". Мне такой хренью, как подтасовка результатов для форумных срачей некотогда заниматься. Даже если бы мог, то не захотел бы.


Пойми такие пересмотри не серьёзны. Я тебе чут-чуть причешу твой код, увеличу объем данных и все сильно изменится.

Смотреть производительность нужно на реальных задачах. Вот на том же парсинге я уже много собак съел и кое что понимаю.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Задолбал Dick Seek со своей "невнимательностью"
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.25 19:19
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Я к чат-ботам полез до того, как проблемы возникли — пытался понять, как делать так, чтоб всё окончательно не умерло.


С ними надо аккуратнее. Надо понимать как они устроены, что им нужно и как от них получить пользу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Задолбал Dick Seek со своей "невнимательностью"
От: T4r4sB Россия  
Дата: 26.11.25 20:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это код не полный. Это часть какого-то алгоритма парсинга.


И какого же?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[8]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 20:57
Оценка:
Здравствуйте, VladD2, Вы писали:

Ф>>Я к чат-ботам полез до того, как проблемы возникли — пытался понять, как делать так, чтоб всё окончательно не умерло.

VD>С ними надо аккуратнее. Надо понимать как они устроены, что им нужно и как от них получить пользу.

Я понимаю, что надо поаккуратнее. Моё негодование вызвано тем, что я хотел бы, чтобы они мне рассказывали то, чего я не знаю, или или обращали моё внимание на то, что я пропустил. Это на самом деле печалька, когда я спрашиваю про код, и мало того, что мне говорят какую-то фигню, так ещё и молчат о том, что в моём коде ошибка.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[8]: Задолбал Dick Seek со своей "невнимательностью"
От: Философ Ад http://vk.com/id10256428
Дата: 26.11.25 21:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну тогда просто опиши задачу и приведи исходные данные, которые нужно обрабатывать.


Исходные данные выглядят примерно так LEN($TAG1). Нужно вытащить значение тега и найти длинну строки. Формат вызова функции не задан жёстко — можно вот так: ($TAG1).LEN, или как-нибудь иначе. В конечном счёте нужно обрабатывать вот такие выражения:

2>LEN($TAG1)

Возвращать нужно double — в существующем коде везде даблы.
Сейчас реализованы вытаскивание значений тегов и бинарные операции, унарных нет.
Опыт подсказывает, что там где захотели одну функцию, захотят и ещё одну — вслед за LEN потребуется что-нибудь типа ToLower(), поэтому я делаю заранее возможность исполнять произвольную функцию (чтобы её можно было добавить за один шаг).

Основная сложность в том, как туда вклиниться — я первые полтора дня просто расшифровывал написанное. Код там очень далёк от идеала.


Ф>>Там код ещё не дописан: всё как всегда непросто — нужно встроиться в существующую систему, которая написана впопыхах, кое-как. \

VD>Ну так может начать с рефакторинга?

Мне по крайней мере до весны не дадут времени заниматься рефакторингом.

VD>Раскрасками? Ты код что ли подсвечиваешь?


Нет, про строчки в DataGridView перекрашиваю и делаю инструменты для настроек раскраски и форматирования данных. Мне тут очень много чем приходится заниматься.

VD>Смотреть производительность нужно на реальных задачах. Вот на том же парсинге я уже много собак съел и кое что понимаю.


Вот это кстати сложно: подобрать данные сложно, и вырезать/вырвать код, который надо профайлить сложно. Коду много лет.
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 26.11.2025 21:41 Философ . Предыдущая версия .
Re[9]: Задолбал Dick Seek со своей "невнимательностью"
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.11.25 12:23
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Я понимаю, что надо поаккуратнее. Моё негодование вызвано тем, что я хотел бы, чтобы они мне рассказывали то, чего я не знаю, или или обращали моё внимание на то, что я пропустил. Это на самом деле печалька, когда я спрашиваю про код, и мало того, что мне говорят какую-то фигню, так ещё и молчат о том, что в моём коде ошибка.


Чтобы ИИшка тебе рассказала больше чем знаешь ты в конкретном вопросе, ты должен в вопросе шарить хуже неё. Тут как с людьми. Ну и у неё должны быть все входные данные.

Надо понимать, что преимущество ИИ не они лучше нас думают. Это не так. А в том, что они а) это делают очень быстро; б) знают много мелочей, которые в голову человека просто не влезают или с которыми он не сталкивался.

Ну и у них есть море проблем. Их (в следствии базовых алгоритмов) нужно прямо таки подталкивать к глубокому анализу. Они буквально ищут знания по словам. Где-то в глубине у них могут быть нужные знания, но из-за недостаточности или нерелевантности слов они могут вынуть куда более поверхностные знания.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Задолбал Dick Seek со своей "невнимательностью"
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 02.12.25 07:39
Оценка:
Здравствуйте, Философ, Вы писали:
DeepSeek ответил на GPT-5 и Gemini 3 Pro — представлены мощные ИИ-модели DeepSeek-V3.2

Китайский стартап DeepSeek выпустил две новые открытые модели с мощными возможностями для рассуждений — DeepSeek-V3.2 и усиленную DeepSeek-V3.2-Speciale. Таким образом компания подтвердила, что Китай играет на равных с американскими лидерами в лице OpenAI и Google.

По тестам разработчиков, модели достигают уровня GPT-5 и Gemini 3 Pro в программировании и математике. Так, DeepSeek-V3.2-Speciale взяла «золото» на Международной математической олимпиаде, Китайской математической олимпиаде, Международной студенческой олимпиаде по программированию и Международной олимпиаде по информатике.

На Американском отборочном экзамене по математике DeepSeek-V3.2-Speciale показала результат в 96,0 %, тогда как GPT-5 High набрала 94,6 %, а Gemini 3 Pro — 95,0 %. В свою очередь в тесте SWE Verified, измеряющем способности ИИ к программированию, китайская новинка набрала 73,1 % (результат GPT-5 High — 74,9 %; Gemini 3 Pro — 76,2 %).

DeepSeek утверждает, что модели серии V3.2 — это её первые нейросети, созданные для ИИ-агентов. Компания заявляет, что DeepSeek V3.2 обеспечивает производительность уровня GPT 5 при выполнении общих задач. Китайский стартап также утверждает, что DeepSeek-V3.2-Speciale обладает способностями к рассуждению, сопоставимыми с новейшей моделью Gemini 3 Pro от Google, особенно в сложных сценариях решения проблем.

DeepSeek добился прорыва за счёт двух приёмов: масштабного дообучения модели с подкреплением на специально сгенерированных сложных задачах, а также DeepSeek Sparse Attention (DSA) — подходу, когда модель не перебирает все токены, а выделяет для работы только самые важные.

DeepSeek-V3.2 уже доступна в приложении, на веб-сайте и в API-сервисах компании. К продвинутой V3.2-Speciale сейчас можно обращаться только через API, она предлагает максимальную мощность рассуждений для сложных задач.

Китайские модели от DeepSeek или Alibaba теснят решения ведущих американских разработчиков. Согласно исследованию MIT и Hugging Face, доля скачиваний новых открытых моделей по состоянию на август выросла до 17 % у китайских разработчиков против 15,8 % у американских.

Успех китайских игроков опирается на быстрый цикл обновления и фокус на открытых и эффективных моделях, которые работают на менее мощном оборудовании. Новые модели DeepSeek вышли спустя два месяца после экспериментальной V3.2-Exp и способны вновь усилить позиции Китая в ИИ-гонке.

и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.