home.social

#связанные_списки — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #связанные_списки, aggregated by home.social.

  1. [Перевод] Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

    «Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам. История из учебника Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно: Преимущества (согласно учебникам): - Вставки и удаления за O(1) в известных позициях - Динамический размер : увеличиваются и уменьшаются согласно необходимости - Пространство не тратится впустую : можно распределять ровно столько, сколько нужно - Гибкость : простота реализации стеков, очередей и других структур Недостатки (согласно учебникам): - Поиск за O(n) : необходим обход, начиная с головы списка - Лишняя память : указатели добавляют оверхед - Невозможность произвольного доступа : нельзя выполнять переходы в произвольные позиции Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ». Вроде бы звучит разумно? Проверка реальностью А вот, чего учебники нам не говорят: связанные списки — это почти всегда плохой выбор. Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

    habr.com/ru/articles/996210/

    #массивы #связанные_списки #пул #оптимизация_кода

  2. [Перевод] Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

    «Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам. История из учебника Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно: Преимущества (согласно учебникам): - Вставки и удаления за O(1) в известных позициях - Динамический размер : увеличиваются и уменьшаются согласно необходимости - Пространство не тратится впустую : можно распределять ровно столько, сколько нужно - Гибкость : простота реализации стеков, очередей и других структур Недостатки (согласно учебникам): - Поиск за O(n) : необходим обход, начиная с головы списка - Лишняя память : указатели добавляют оверхед - Невозможность произвольного доступа : нельзя выполнять переходы в произвольные позиции Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ». Вроде бы звучит разумно? Проверка реальностью А вот, чего учебники нам не говорят: связанные списки — это почти всегда плохой выбор. Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

    habr.com/ru/articles/996210/

    #массивы #связанные_списки #пул #оптимизация_кода

  3. [Перевод] Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

    «Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам. История из учебника Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно: Преимущества (согласно учебникам): - Вставки и удаления за O(1) в известных позициях - Динамический размер : увеличиваются и уменьшаются согласно необходимости - Пространство не тратится впустую : можно распределять ровно столько, сколько нужно - Гибкость : простота реализации стеков, очередей и других структур Недостатки (согласно учебникам): - Поиск за O(n) : необходим обход, начиная с головы списка - Лишняя память : указатели добавляют оверхед - Невозможность произвольного доступа : нельзя выполнять переходы в произвольные позиции Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ». Вроде бы звучит разумно? Проверка реальностью А вот, чего учебники нам не говорят: связанные списки — это почти всегда плохой выбор. Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

    habr.com/ru/articles/996210/

    #массивы #связанные_списки #пул #оптимизация_кода

  4. [Перевод] Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

    «Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам. История из учебника Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно: Преимущества (согласно учебникам): - Вставки и удаления за O(1) в известных позициях - Динамический размер : увеличиваются и уменьшаются согласно необходимости - Пространство не тратится впустую : можно распределять ровно столько, сколько нужно - Гибкость : простота реализации стеков, очередей и других структур Недостатки (согласно учебникам): - Поиск за O(n) : необходим обход, начиная с головы списка - Лишняя память : указатели добавляют оверхед - Невозможность произвольного доступа : нельзя выполнять переходы в произвольные позиции Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ». Вроде бы звучит разумно? Проверка реальностью А вот, чего учебники нам не говорят: связанные списки — это почти всегда плохой выбор. Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

    habr.com/ru/articles/996210/

    #массивы #связанные_списки #пул #оптимизация_кода

  5. [Перевод] Структуры данных на практике. Глава 4: Массивы и локальность кэша

    «Массив — самая важная структура данных в computer science», — Дональд Кнут (вольное изложение цитаты) Простейшая структура данных Массивы настолько просты, что мы иногда воспринимаем их, как нечто само собой разумеющееся. Смежная память, доступ за O(1): что тут ещё оптимизировать? Всё. Я работал над конвейером обработки пакетов сетевого коммутатора. Код был простым: считываем пакеты из кольцевого буфера (массива), обрабатываем их и записываем результаты в другой массив. Всё просто, правда? Но производительность была ужасной. Мы обрабатывали 100 тысяч пакетов в секунду, хотя оборудование должно было справляться с 1 миллионом. Профилировщик показал нечто странное: $ perf stat -e cache-misses,instructions ./packet_processor Performance counter stats: 450,000 cache-misses 1,000,000 instructions 450000 промахов кэша на 1000000 команд? То есть промах происходил раз в 2-3 команды. При простых операциях с массивами это не имело никакого смысла. Проблема заключалась не в самих массивах, а в том, как мы их использовали .

    habr.com/ru/articles/992014/

    #массивы #структуры_данных #связанные_списки #оптимизация_кода

  6. [Перевод] Структуры данных на практике. Глава 4: Массивы и локальность кэша

    «Массив — самая важная структура данных в computer science», — Дональд Кнут (вольное изложение цитаты) Простейшая структура данных Массивы настолько просты, что мы иногда воспринимаем их, как нечто само собой разумеющееся. Смежная память, доступ за O(1): что тут ещё оптимизировать? Всё. Я работал над конвейером обработки пакетов сетевого коммутатора. Код был простым: считываем пакеты из кольцевого буфера (массива), обрабатываем их и записываем результаты в другой массив. Всё просто, правда? Но производительность была ужасной. Мы обрабатывали 100 тысяч пакетов в секунду, хотя оборудование должно было справляться с 1 миллионом. Профилировщик показал нечто странное: $ perf stat -e cache-misses,instructions ./packet_processor Performance counter stats: 450,000 cache-misses 1,000,000 instructions 450000 промахов кэша на 1000000 команд? То есть промах происходил раз в 2-3 команды. При простых операциях с массивами это не имело никакого смысла. Проблема заключалась не в самих массивах, а в том, как мы их использовали .

    habr.com/ru/articles/992014/

    #массивы #структуры_данных #связанные_списки #оптимизация_кода

  7. [Перевод] Структуры данных на практике. Глава 4: Массивы и локальность кэша

    «Массив — самая важная структура данных в computer science», — Дональд Кнут (вольное изложение цитаты) Простейшая структура данных Массивы настолько просты, что мы иногда воспринимаем их, как нечто само собой разумеющееся. Смежная память, доступ за O(1): что тут ещё оптимизировать? Всё. Я работал над конвейером обработки пакетов сетевого коммутатора. Код был простым: считываем пакеты из кольцевого буфера (массива), обрабатываем их и записываем результаты в другой массив. Всё просто, правда? Но производительность была ужасной. Мы обрабатывали 100 тысяч пакетов в секунду, хотя оборудование должно было справляться с 1 миллионом. Профилировщик показал нечто странное: $ perf stat -e cache-misses,instructions ./packet_processor Performance counter stats: 450,000 cache-misses 1,000,000 instructions 450000 промахов кэша на 1000000 команд? То есть промах происходил раз в 2-3 команды. При простых операциях с массивами это не имело никакого смысла. Проблема заключалась не в самих массивах, а в том, как мы их использовали .

    habr.com/ru/articles/992014/

    #массивы #структуры_данных #связанные_списки #оптимизация_кода

  8. [Перевод] Структуры данных на практике. Глава 4: Массивы и локальность кэша

    «Массив — самая важная структура данных в computer science», — Дональд Кнут (вольное изложение цитаты) Простейшая структура данных Массивы настолько просты, что мы иногда воспринимаем их, как нечто само собой разумеющееся. Смежная память, доступ за O(1): что тут ещё оптимизировать? Всё. Я работал над конвейером обработки пакетов сетевого коммутатора. Код был простым: считываем пакеты из кольцевого буфера (массива), обрабатываем их и записываем результаты в другой массив. Всё просто, правда? Но производительность была ужасной. Мы обрабатывали 100 тысяч пакетов в секунду, хотя оборудование должно было справляться с 1 миллионом. Профилировщик показал нечто странное: $ perf stat -e cache-misses,instructions ./packet_processor Performance counter stats: 450,000 cache-misses 1,000,000 instructions 450000 промахов кэша на 1000000 команд? То есть промах происходил раз в 2-3 команды. При простых операциях с массивами это не имело никакого смысла. Проблема заключалась не в самих массивах, а в том, как мы их использовали .

    habr.com/ru/articles/992014/

    #массивы #структуры_данных #связанные_списки #оптимизация_кода

  9. Велосипедим связанный список на Wolfram

    Возможно 11 подписчиков моего блога обратили внимание на тот факт, что все мои статьи касаются языка Wolfram, а несколько последних статей вышли довольно громоздкими. Одна из последних статей была помечена Хабром как требующая в среднем 32 минуты на прочтение. Я посчитал, что это может отпугнуть пользователей (все 11 человек и не факт, что все они до сих пор читают Хабр) и решил попробовать писать более короткие статьи. Плюс я сам перестану теряться в большом количестве текста. Данная статья является полностью самостоятельной и ценна для меня сама по себе, но она так же является подготовительной частью к другой статье, которая связана с одной несложной алгоритмической задачей и пока что находится в черновиках. Пока я писал ее - я понял, что выйдет много текста и кода, поэтому я решил разбить ее на несколько частей. Ниже - реализация структуры данных LinkedList на Wolfram Language .

    habr.com/ru/articles/787784/

    #wolfram #wolfram_mathematica #wolfram_language #структуры_данных #связанные_списки #велосипедостроение #велосипеды #велосипед #велосипедизм #велосипединг

  10. Велосипедим связанный список на Wolfram

    Возможно 11 подписчиков моего блога обратили внимание на тот факт, что все мои статьи касаются языка Wolfram, а несколько последних статей вышли довольно громоздкими. Одна из последних статей была помечена Хабром как требующая в среднем 32 минуты на прочтение. Я посчитал, что это может отпугнуть пользователей (все 11 человек и не факт, что все они до сих пор читают Хабр) и решил попробовать писать более короткие статьи. Плюс я сам перестану теряться в большом количестве текста. Данная статья является полностью самостоятельной и ценна для меня сама по себе, но она так же является подготовительной частью к другой статье, которая связана с одной несложной алгоритмической задачей и пока что находится в черновиках. Пока я писал ее - я понял, что выйдет много текста и кода, поэтому я решил разбить ее на несколько частей. Ниже - реализация структуры данных LinkedList на Wolfram Language .

    habr.com/ru/articles/787784/

    #wolfram #wolfram_mathematica #wolfram_language #структуры_данных #связанные_списки #велосипедостроение #велосипеды #велосипед #велосипедизм #велосипединг