Научная статья на тему 'РАЗРАБОТКА И ИССЛЕДОВАНИЕ АЛГОРИТМОВ ПРЯМОГО ДОСТУПА К ЭЛЕМЕНТАМ КОЛЛЕКЦИЙ НА ОСНОВЕ СВЯЗНЫХ СПИСКОВ'

РАЗРАБОТКА И ИССЛЕДОВАНИЕ АЛГОРИТМОВ ПРЯМОГО ДОСТУПА К ЭЛЕМЕНТАМ КОЛЛЕКЦИЙ НА ОСНОВЕ СВЯЗНЫХ СПИСКОВ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
11
8
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СВЯЗНЫЕ СПИСКИ / ЧАСТО ИСПОЛЬЗУЕМЫЕ ЭЛЕМЕНТЫ / ИЗМЕНЕНИЕ РАЗМЕРОВ КОЛЛЕКЦИИ / ПОСЛЕДНИЙ ЭЛЕМЕНТ / ФОРМИРОВАНИЕ МАССИВА / СКОРОСТЬ ДОСТУПА / КЭШИРОВАНИЕ / ОПТИМИЗАЦИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Часов Е. А., Чуйков В. А., Синегубов Т. А.

В данной статье затронута проблема низкой скорости доступа к элементам коллекций на основе связных списков и приведен один из способов решения данной проблемы. Разработан алгоритм, который будет использовать дополнительную коллекцию для хранения наиболее часто используемых элементов исходной коллекции и приведены методы оптимального хранения и управления этими элементами. Данный способ обеспечивает повышение скорости выполнения больших программ с использованием связных списков.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

RESEARCH AND DEVELOPMENT DIRECT ACCESS ALGORITHMS TO ELEMENTS OF COLLECTIONS BASED LINKED LIST

In this article is concerned the problem of low speed of access to the elements of collections based linked list and shows one of the ways to solve this problem. It developed an algorithm that will be used to store additional collection of the most frequently used elements of the original collection and provides methods of optimal storage and management of these elements. This method enhances the execution speed of large programs which uses linked lists.

Текст научной работы на тему «РАЗРАБОТКА И ИССЛЕДОВАНИЕ АЛГОРИТМОВ ПРЯМОГО ДОСТУПА К ЭЛЕМЕНТАМ КОЛЛЕКЦИЙ НА ОСНОВЕ СВЯЗНЫХ СПИСКОВ»

УДК 004

Часов Е. А. аспирант, ассистент кафедра «Информатика и вычислительная техника»

Чуйков В.А. студент Синегубов Т. А. студент

Поволжский государственный университет телекоммуникаций и информатики

Россия, г. Самара

Chasov E. A., Lecturer Assistant of Department of Informatics and Computer Engineering Povolzhskiy State University of Telecommunications and Informatics

Russia, Samara Chuykov V. A. Student

Povolzhskiy State University of Telecommunications and Informatics

Russia, Samara Sinegubov T. A. Student

Povolzhskiy State University of Telecommunications and Informatics

Russia, Samara

РАЗРАБОТКА И ИССЛЕДОВАНИЕ АЛГОРИТМОВ ПРЯМОГО ДОСТУПА К ЭЛЕМЕНТАМ КОЛЛЕКЦИЙ НА ОСНОВЕ СВЯЗНЫХ

СПИСКОВ

Аннтоация

В данной статье затронута проблема низкой скорости доступа к элементам коллекций на основе связных списков и приведен один из способов решения данной проблемы. Разработан алгоритм, который будет использовать дополнительную коллекцию для хранения наиболее часто используемых элементов исходной коллекции и приведены методы оптимального хранения и управления этими элементами. Данный способ обеспечивает повышение скорости выполнения больших программ с использованием связных списков. Ключевыеслова

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

RESEARCH AND DEVELOPMENT DIRECT ACCESS ALGORITHMS TO ELEMENTS OF COLLECTIONS BASED LINKED

LIST

Аннтоация

In this article is concerned the problem of low speed of access to the elements of collections based linked list and shows one of the ways to solve this problem. It developed an algorithm that will be used to store additional collection of the most frequently used elements of the original collection and provides methods of optimal storage and management of these elements. This method enhances the execution speed of large programs which uses linked lists.

Ключевые слова

Linked lists, frequently used elements, reference array, changing the size of the collection, last element, array formation, access speed, caching, optimization.

Связный список — базовая динамическая структура данных в информатике, состоящая из узлов, каждый из которых содержит как собственно данные, так и одну или две ссылки («связки») на следующий и/или предыдущий узел списка. К преимуществам структур данных, основанных на связных списках, относят эффективное (за константное время) динамическое добавление и удаление элементов. Недостатками обычно считается сложность прямого доступа к элементу, а именно определение физического адреса по его порядковому номеру в списке, в следствие чего некоторые операции со списками медленнее, чем с массивами, так как к произвольному элементу списка можно обратиться, только пройдя все предшествующие ему элементы, что составляет сложность O(n).

Несмотря на это коллекции на основе связных списков активно используются в современных языках программирования, таких как, например, Java и С#. Более того, такие организации, как фонд ApacheSoftware разрабатывают дополнительные библиотеки коллекций, которые содержат десятки разнообразных коллекций, позволяющие решать задачи в разы эффективнее. Это позволяет сделать вывод о том, что целесообразно исследовать и разработать решение, которое позволило бы устранить хотя бы частично выше описанные недостатки.

В качестве решения можно рассмотреть возможность создания вспомогательного массива, заполняемого в процессе работы программы и хранящего в себе ссылки на наиболее часто используемые элементы исходной коллекции объектов.

На начальных этапах выполнения программы при обращении к элементу основной коллекции в массиве будет создаваться ссылка на данный элемент. Каждая ссылка в массиве будет характеризоваться «весом», зависящим от частотыиспользования элемента. Таким образом, при обращении к элементу вес его ссылки будет увеличиваться на 1. Чем выше «вес» ссылки, тем ближе к началу массива она находится. Для осуществления этого достаточно простого сравнения «веса» текущейссылки

с тем же показателемссылки, находящимся в массиве на одну позицию левее (кроме ссылки с нулевым индексом). Если результат сравнения равен «истине», то осуществляется перестановка ссылок.

После нескольких обращений к элементам коллекции формируется заполненный массив ссылок, упорядоченный по их «весам». Таким образом, появляется возможность обращения к наиболее часто используемым элементам через данный массив ссылок, не прибегая к перебору коллекции, что позволит ускорить доступ к элементам, попавшим в массив самых часто используемых.

Если ссылка в конце массива имеет ненулевой «вес», то «веса» всех ссылок в массиве уменьшаются на 1, а элемент из коллекции, претендующий на это место, признается «случайным» и не попадает в массив.

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

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

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

Алгоритм формирования массива, а так же манипулирования данными внутри него, является основополагающим и существует возможность его расширять, оптимизируя под необходимые задачи. Программист имеет право задействовать свою логику помещения ссылок на элементы в массив, исходя из условий задачи и исходной коллекции.

Также существует возможность использования динамического массива или коллекции на основе массива для того, чтобы менять размер данного буфера. Это может быть необходимо в случае изменения данных или их количества внутри исходной коллекции. Логика изменения размеров коллекции может быть уникальна для каждой задачи, которую необходимо оптимизировать, и может зависеть от различных параметров исходной коллекции (таких как типы данных, количество, частота появления одинаковых элементов и т.д.). Наиболее простым алгоритмом будет отслеживание поведения последнего элемента массива:

Если на место последнего элемента поочередно претендуют одни и те же элементы исходной коллекции, то массив нуждается в увеличении, которое позволит предотвратить лишние обращения к элементам исходной коллекции. Если же на место последнего элемента поочередно попадают случайные элементы без явной зависимости, и «вес» ссылок на эти элементы редко превышает 1, то данный массив необходимо уменьшить, так как на месте последнего элемента находятся ссылки на элементы, которые выше принято считать «случайными». Это позволит сократить время на постоянное случайное помещение ссылок в конец массива.

Каждый алгоритм, как основной, так и специально написанный для конкретной коллекции, постоянно нуждается в доработке, для этого необходимо изучать, как конкретная программа будет использовать различные элементы коллекций в зависимости от различных условий.

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

Использованные источники:

1. Эккель, Б. Философия Java. Библиотека программиста [Текст]/Б. Эккель -4-е изд. - СПб.: Питер, 2009. - 640 с.

2. Шилдт, Г. Java. Полное руководство [Текст]/Г. Шилдт - 8-е изд.: пер. с англ. - М.: ООО «И.Д. Вильямс», 2012. - 1104 с.

3. Спецификация языка Java [Электронный ресурс]/2017.- Режим доступа: http://java.sun.com/docs/books/jls, свободный. - Загл. с экрана

4. Спецификация виртуальной машины Java [Электронный ресурс]/2017-Режим доступа: http://java.sun.com/docs/books/jvms/, свободный. - Загл. с экрана

1. Eckel, B. Thinking in Java [Text]/B. Eckel - 4-d ed. - MindView Inc, 2009. -640 p.

2. Schildt, H. Java: The Complete Reference [Text]/H. Schildt - 9-th ed.:. -Osborn, Inc 2012. - 1104 p.

3. Javadoc [URL]/2017.- URL: http://java.sun.com/docs/books/jls

4. JVM Specification [URL]/2017- URL: http://java.sun.com/docs/books /jvms/

i Надоели баннеры? Вы всегда можете отключить рекламу.