Создание эффективной реализации сортированного списка с использованием 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).
Другие работы
Основы Инженерного творчества.Новые швейные нитки
Elfa254
: 10 сентября 2015
Разработка задания на проведение патентных исследований.
Разработка регламента поиска.
Поиск и отбор информации материалов.
Аналитический обзор исследуемого объекта.
Анализ уровня и основных направлений развития области или вида техники.
Определение основных направлений развития области техники или вида техники.
Разработка нового технического предложения.
Заключение.
Библиографический список.
Приложение – картотека.
235 руб.
Лабораторные работы №1-3 по предмету: Основы компьютерных технологий, 4 семестр, для всех вариантов
Andreas74
: 8 мая 2019
Лабораторно-практическая работа № 1
«Создание сложного документа с помощью текстового редактора, выполнение вычислений по табличным данным»
Задание
1. Создайте таблицу и заполните ее ячейки следующими данными:
2. Отформатируйте таблицу по образцу.
3. Преобразовать рассматриваемую таблицу следующим образом:
• Вставить столбцы Сумма и НДС и оформить их как вычисляемые.
• Вставить строку ИТОГО и подсчитать в ней суммы по каждому столбцу.
Ключ к заданию:
Добавление столбца
Выделите крайн
300 руб.
Управленческие нововведения на предприятии как стратегический ресурс инновационного развития
alfFRED
: 28 февраля 2014
ВВЕДЕНИЕ………………………………………………………………3
ГЛАВА 1 Социологический анализ категории «инновационное развитие»…………………………….…………………………………..6
ГЛАВА 2 Сущность и классификация управленческих нововведений……………………………………………………………11
ГЛАВА 3 Особенности реализации управленческих нововведений на предприятии в контексте инновационного развития страны………………...15
ЗАКЛЮЧЕНИЕ………………………………………………………………….23
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ…………………………….25
ВВЕДЕНИЕ
Инновационность лежит в основе конкурентоспособности экономи
10 руб.
Сопряжения. Вариант 14 ЧЕРТЕЖ
coolns
: 20 февраля 2026
Сопряжения. Вариант 14 ЧЕРТЕЖ
По исходным данным вычертите изображение плоской детали. Деталь расположите на чертеже горизонтально и примените масштаб изображения 1:1.
Чертеж выполнен на формате А3 + pdf (все на скриншотах показано и присутствует в архиве) выполнены в КОМПАС 3D.
Также открывать и просматривать, печатать чертежи и 3D-модели, выполненные в КОМПАСЕ можно просмоторщиком КОМПАС-3D Viewer.
По другим вариантам и всем вопросам пишите в Л/С.
100 руб.