Создание эффективной реализации сортированного списка с использованием generics
Состав работы
|
|
|
|
Необходимые программы
Работа представляет собой zip архив с файлами (распаковать онлайн), которые открываются в программах:
- Microsoft Word
Описание
Так случилось, что я стал программистом 1С. Все прекрасно в этой среде, за исключением скорости. Эту проблему можно решить только одним способом: прямым доступом к файлам и обработкой результатов на компилируемом языке в памяти.
Так, для группирования данных нужны алгоритмы поиска и вставки. И мое сознание, отягощенное бухгалтерским учетом, не нашло ничего лучшего, чем использовать аналог TList (SortedList), представляющий собой динамический массив со свойствами «емкость» и «количество элементов».
Упорядоченность в этом массиве поддерживается с помощью компараторов, а при поиске используется алгоритм половинного деления с поиском нужной позиции i по ключу с условием (Items[i]>=Key) AND (Items[i-1]<Key). Если такого ключа нет, то все данные с позиции i переносятся на одну позицию в большую сторону. При этом используются процессорные команды MOVSW и MOVSB, которые выполняются очень быстро. При полном заполнении массива его размер увеличивается либо за счет свободных адресов, следующих за конечным адресом в массиве, либо с помощью выделения нового массива большей емкости с копированием данных из оригинала.
Но время шло, и объем группировок вышел за 10000 записей. Мой AMD K6 200 (мощный по тем временам компьютер) начал работать слишком меленно. И не удивительно – количество сдвигаемых элементов в среднем стало равно N2/4, то есть 108.
И вот как-то, после очередного обучения бухгалтеров бухгалтерии, пришла мысль. Зачем держать один большой массив, если можно его разбить на множество маленьких? Сказано – сделано. В течение двух минут я создал двухуровневый массив. Первый (верхний) уровень – это массив, элементами которого являются ссылки на массивы нижнего уровня. Второй из уровней (нижний) по сути, состоит из простых динамических массивов. Под простыми понимается то, что память под них выделяется заранее и впоследствии не перезанимается. Фактически этот массив представляет собой структуру, хранящую счетчик элементов и массив пар «ключ-значение». В дальнейшем я буду называть эти динамические массивы листовыми страницами (LeafPage).
Так, для группирования данных нужны алгоритмы поиска и вставки. И мое сознание, отягощенное бухгалтерским учетом, не нашло ничего лучшего, чем использовать аналог TList (SortedList), представляющий собой динамический массив со свойствами «емкость» и «количество элементов».
Упорядоченность в этом массиве поддерживается с помощью компараторов, а при поиске используется алгоритм половинного деления с поиском нужной позиции i по ключу с условием (Items[i]>=Key) AND (Items[i-1]<Key). Если такого ключа нет, то все данные с позиции i переносятся на одну позицию в большую сторону. При этом используются процессорные команды MOVSW и MOVSB, которые выполняются очень быстро. При полном заполнении массива его размер увеличивается либо за счет свободных адресов, следующих за конечным адресом в массиве, либо с помощью выделения нового массива большей емкости с копированием данных из оригинала.
Но время шло, и объем группировок вышел за 10000 записей. Мой AMD K6 200 (мощный по тем временам компьютер) начал работать слишком меленно. И не удивительно – количество сдвигаемых элементов в среднем стало равно N2/4, то есть 108.
И вот как-то, после очередного обучения бухгалтеров бухгалтерии, пришла мысль. Зачем держать один большой массив, если можно его разбить на множество маленьких? Сказано – сделано. В течение двух минут я создал двухуровневый массив. Первый (верхний) уровень – это массив, элементами которого являются ссылки на массивы нижнего уровня. Второй из уровней (нижний) по сути, состоит из простых динамических массивов. Под простыми понимается то, что память под них выделяется заранее и впоследствии не перезанимается. Фактически этот массив представляет собой структуру, хранящую счетчик элементов и массив пар «ключ-значение». В дальнейшем я буду называть эти динамические массивы листовыми страницами (LeafPage).
Другие работы
Задание. Вариант №9. Насос
vermux1
: 18 марта 2018
Задание вариант 9 ПМИГ.ХХХХХХ.009 СБ Насос
вариант 9 Насос деталировка
вариант 9 Насос чертежи
вариант 9 Насос сборочный чертеж
Задание по созданию чертежей деталей и сборок
1.Завершить оформление сборочного чертежа и спецификации.
2.Выполнить трехмерные модели и ассоциативные чертежи корпуса 1 и крышки 3. В каждом ассоциативном чертеже расположить аксонометрию с вырезом одной четверти детали.
Описание насоса
Насос — машина, преобразующая механическую энергию двигателя в механическую энерги
600 руб.
Лабораторные работы 1-3 по дисциплине: Схемотехника телекоммуникационных устройств. Вариант №03
IT-STUDHELP
: 12 июля 2023
Лабораторная работа №1
«Исследование резисторного каскада предварительного усиления на биполярном транзисторе»
1. Цель работы
Исследовать влияние параметров элементов схемы каскада с эмиттерной стабилизацией на его показатели (коэффициент усиления, частотные и переходные характеристики).
2. Принципиальная схема исследуемого каскада
3. Предварительный расчет
Таблица 1 – Исходные данные для предварительного расчета
Вариант 13
Тип транзистора KT 3102А
Параметр h21э 250
Ск, пФ 14
fh21э, МГц 2,0
1050 руб.
Гидравлика УрИ ГПС МЧС Задание 7 Вариант 79
Z24
: 27 марта 2026
Ответить на теоретические вопросы:
Каковы причины возникновения гидравлического удара? Как изменяется во времени давление у задвижки при гидравлическом ударе? Что такое прямой и непрямой гидравлический удар?
Как рассчитать величину повышения давления в трубопроводе при прямом и непрямом гидравлическом ударе? Отчего зависит скорость ударной волны? Приведите примеры возникновения гидравлического удара при эксплуатации пожарной техники. Как можно уменьшить или предотвратить ударное повышение да
120 руб.
Теплотехника МГУПП 2015 Задача 3.2 Вариант 27
Z24
: 8 января 2026
Определить необходимую толщину слоя теплоизоляции δиз наружной стены холодильной камеры (рис. 3), если:
толщина стены δст;
коэффициенты теплопроводности соответственно материала стены и теплоизоляции λст и λиз;
температура наружного воздуха и воздуха в холодильной камере tв1 и tв2;
коэффициенты теплоотдачи от наружного воздуха к стене α1 и от поверхности теплоизоляции к воздуху в холодильной камере α2;
заданная плотность теплового потока q.Оценить также температуры поверхностей tc1, tc2 и
150 руб.