Создание эффективной реализации сортированного списка с использованием 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).
Другие работы
Электроника
Yuliyatitova
: 1 апреля 2020
ЭЛЕКТРОНИКА
Содержание
Введение 3
1 Электрический расчёт цифровой схемы 4
1.1 Электрический расчёт элементов схемы 4
1.1.1 Комбинация 0111 4-5
1.1.2 Комб
200 руб.
Лабораторные работы № 1,2,3.4,5 по информатике. ВАРИАНТ №7,№17
rai9247
: 19 апреля 2019
по лабораторной работе № 1
Программирование разветвляющихся процессов
по лабораторной работе № 2
Программирование простых циклических процессов
по лабораторной работе № 3
Программирование типовых алгоритмов
по лабораторной работе № 4
Обработка одномерных массивов
по лабораторной работе № 5
Обработка двумерных массивов
100 руб.
Особенности и характеристика двух основных элементов таможенного оформления
alfFRED
: 8 ноября 2013
Таможенное оформление - это процедура помещения товаров и транспортных средств под определенный таможенный режим и выпуск товаров в соответствии с заявленным режимом.
Таможенное оформление начинается не позднее 30 минут после того, как должностное лицо таможенного органа РФ заявило о своей готовности к таможенному оформлению в отношении конкретных товаров и транспортных средств.
Процедура таможенного оформления состоит из двух основных элементов:
предварительные операции;
основное таможенное
10 руб.
Теоретическая механика ДВГУПС 2014 Задача К2 Рисунок 7 Номер условия 1
Z24
: 6 октября 2026
Механизм состоит из колес 1–4, находящихся в зацеплении, рукоятки АО, жестко соединенной с соответствующим колесом, и груза В, привязанного к концу нити, намотанной на одно из колес. Радиусы колес равны соответственно r1, r2, r3 и r4 (рис. К2.0 — К2.9, табл. К2).
Зная закон движения груза В x = f (t), определить в момент времени t1 угловую скорость и угловое ускорение колеса 3, а также скорость и ускорение конца рукоятки А.
250 руб.