рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Векторы

Векторы - раздел Образование, СТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ Логическая Структура. Вектор (Одномерный Массив) - Структура Данных ...

ЛОГИЧЕСКАЯ СТРУКТУРА. Вектор (одномерный массив) - структура

данных с фиксированным числом элементов одного и того же типа ти-

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

вектора номер. Обращение к элементу вектора выполняется по имени

вектора и номеру требуемого элемента.

МАШИННОЕ ПРЕДСТАВЛЕНИЕ. АДРЕСАЦИЯ ЭЛЕМЕНТОВ СТРУКТУР. Эле-

менты вектора размещаются в памяти в подряд расположенных ячейках

памяти. Под элемент вектора выделяется количество байт памяти,

определяемое базовым типом элемента этого вектора. Необходимое

число байтов памяти для хранения одного элемента вектора называ-

ется слотом. Размер памяти для хранения вектора определяется про-

изведением длины слота на число элементов.

В языках программирования вектор представляется одномерным

массивом с синтаксисом описания вида (PASCAL):

<Имя> : array [n..k] of <тип>;

где n-номер первого элемента, k-номер последнего элемента. Предс-

тавление в памяти вектора будет такое, как показано на рис. 3.1.

@ Имя│+0 │+Sizeof(тип) │ │+(k-n)*Sizeof(тип)

├─────────┼──────────────┐ ├───────────┼─────────────┐

│ Имя [n] │Имя [n+1] │...│ Имя [k-1] │ Имя [k] │

└─────────┴──────────────┘ └───────────┴─────────────┘

Рис. 3.1. Представление вектора в памяти

где @ Имя -адрес вектора или, что тоже самое, адрес первого эле-

мента вектора,

Sizeof(тип)-размер слота (количество байтов памяти для запи-

си одного элемента вектора),

(k-n)*Sizeof(тип) - относительный адрес элемента с номером

k, или, что тоже самое, смещение элемента с номером k.

Например:

var m1:array[-2..2] of real;

представление данного вектора в памяти будет как на рис. 3.2.

Смещение элем. ┌────────┬────────┬────────┬────────┬────────┐

относ.адреса m1 │ +0 │ +6 │ +12 │ +18 │ +24 │

(байт) ├────────┼────────┼────────┼────────┼────────┤

Значения │ m1[-2] │ m1[-1] │ m1[0] │ m1[1] │ m1[2] │

эл.массива └────────┴────────┴────────┴────────┴────────┘

Рис. 3.2. Представление вектора m1 в памяти

В языках, где память распределяется до выполнения программы

на этапе компиляции (C, PASCAL, FORTRAN), при описании типа век-

тора граничные значения индексов должны определены. В языках, где

память может распределяться динамически (ALGOL, PL/1), значения

индексов могут быть заданы во время выполнения программы.

Количество байтов непрерывной области памяти, занятых однов-

ременно вектором, определяется по формуле:

ByteSise = ( k - n + 1 ) * Sizeof (тип)

Обращение к i-тому элементу вектора выполняется по адресу

вектора плюс смещение к данному элементу. Смещение i-ого элемента

вектора определяется по формуле:

ByteNumer = ( i- n ) * Sizeof (тип),

а адрес его: @ ByteNumber = @ имя + ByteNumber.

где @ имя - адрес первого элемента вектора.

Например:

var МAS: array [ 5..10 ] of word.

Базовый тип элемента вектора - Word требует 2 байта, поэтому

на каждый элемент вектора выделяется по два байта. Тогда таблица

3.1 смещений элементов вектора относительно @Mas выглядит так:

Таблица 3.1

┌─────────────┬───────┬───────┬───────┬───────┬───────┬───────┐

│ Смещение │ + 0 │ + 2 │ + 4 │ + 6 │ + 8 │ + 10 │

│ (байт) │ │ │ │ │ │ │

├─────────────┼───────┼───────┼───────┼───────┼───────┼───────┤

│Идентификатор│ │ │ │ │ │ │

│ поля │ MAS[5]│ MAS[6]│ MAS[7]│ MAS[8]│ MAS[9]│MAS[10]│

└─────────────┴───────┴───────┴───────┴───────┴───────┴───────┘

Этот вектор будет занимать в памяти: (10-5+1)*2 = 12 байт.

Смещение к элементу вектора с номером 8: (8-5)*2 = 6

Адрес элемента с номером 8: @ MAS + 6.

При доступе к вектору задается имя вектора и номер элемента

вектора. Таким образом, адрес i-го элемента может быть вычислен

как: @Имя[i] = @Имя + i*Sizeof(тип) - n*Sizeof(тип) (3.1)

Это вычисление не может быть выполнено на этапе компиляции,

так как значение переменной i в это время еще неизвестно. Следо-

вательно, вычисление адреса элемента должно производиться на эта-

пе выполнения программы при каждом обращении к элементу вектора.

Но для этого на этапе выполнения, во-первых, должны быть известны

параметры формулы (3.1): @Имя Sizeof(тип), n, а во-вторых, при

каждом обращении должны выполняться две операции умножения и две

- сложения. Преобразовав формулу (3.1) в формулу (3.2),

@Имя[i] = A0 + i*Sizeof(тип) ─┐ (3.2)

A0 = @Имя - n*Sizeof(тип) ─┘

сократим число хранимых параметров до двух, а число операций - до

одного умножения и одного сложения, так как значение A0 может

быть вычислено на этапе компиляции и сохранено вместе с Size-

of(тип) в дескрипторе вектора. Обычно в дескрипторе вектора сох-

раняются и граничные значения индексов. При каждом обращении к

элементу вектора заданное значение сравнивается с граничными и

программа аварийно завершается, если заданный индекс выходит за

допустимые пределы.

Таким образом, информация, содержащаяся в дескрипторе векто-

ра, позволяет, во-первых, сократить время доступа, а во-вторых,

обеспечивает проверку правильности обращения. Но за эти преиму-

щества приходится платить, во-первых, быстродействием, так как

обращения к дескриптору - это команды, во-вторых, памятью как для

размещения самого дескриптора, так и команд, с ним работающих.

Можно ли обойтись без дескриптора вектора?

В языке C, например, дескриптор вектора отсутствует, точнее,

не сохраняется на этапе выполнения. Индексация массивов в C обя-

зательно начинается с нуля. Компилятор каждое обращение к элемен-

ту массива заменяет на последовательность команд, реализующую

частный случай формулы (3.1) при n = 0:

@Имя[i] = @Имя + i*Sizeof(тип)

Программисты, привыкшие работать на C, часто вместо выраже-

ния вида: Имя[i] употребляют выражение вида: *(Имя+i).

Но во-первых, ограничение в выборе начального индекса само

по себе может являться неудобством для программиста, во-вторых,

отсутствие граничных значений индексов делает невозможным конт-

роль выхода за пределы массива. Программисты, работающие с C, хо-

рошо знают, что именно такие ошибки часто являются причиной "за-

висания" C-программы при ее отладке.

– Конец работы –

Эта тема принадлежит разделу:

СТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ

Массивы Логическая структура фиксированным набором элементов... Операции... Важнейшая операция физического уровня над массивом доступ...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Векторы

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

СТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
Статические структуры относятся к разряду непримитивных структур, которые, фактически, представляют собой структурирован- ное множество примитивных, базовых, структур. Например, в

Логическая структура
Массив - такая структура данных, которая характеризуется: - фиксированным набором элементов одного и того же типа; - каждый элемент имеет уникальный набор значений индексов;

Физическая структура
Физическая структура - это размещение элементов массива в памяти ЭВМ. Для случая двумерного массива, состоящего из (k1-n1+1) строк и (k2-n2+1) столбцов физическая структура предс-

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

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

МАССИВЫ С МАТЕМАТИЧЕСКИМ ОПИСАНИЕМ МЕСТОПОЛОЖЕНИЯ НЕФОНОВЫХ
ЭЛЕМЕНТОВ. К данному типу массивов относятся массивы, у которых местоположения элементов со значениями отличными от фонового, мо- гут быть математически описаны,

ПРЕДСТАВЛЕНИЕ РАЗРЕЖЕННЫХ МАТРИЦ МЕТОДОМ ПОСЛЕДОВАТЕЛЬНОГО
РАЗМЕЩЕНИЯ. Один из основных способов хранения подобных разрежен- ных матриц заключается в запоминании ненулевых элементов в одно- мерном массиве и идентификации

ПРЕДСТАВЛЕНИЕ РАЗРЕЖЕННЫХ МАТРИЦ МЕТОДОМ СВЯЗАННЫХ СТРУКТУР.
Методы последовательного размещения для представления разреженных матриц обычно позволяют быстрее выполнять операции над матрицами и более эффективно использовать память, чем мето

Множества
ЛОГИЧЕСКАЯ СТРУКТУРА. Множество - такая структура, которая представляет собой набор неповторяющихся данных одного и того же типа. Множество может принимать все зн

Числовые множества
Стандартный числовой тип, который может быть базовым для формирования множества - тип byte. Множество хранится в памяти как показано в таблице 3.3. Таблица 3.3 &

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

Множество от интервального типа
Множество, базовым типом которого есть интервальный тип, хранится также, как множество, базовым типом которого является тип byte. Однако, в памяти занимает место, которое зависит

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

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

Структурами. Поиск
В этом и следующих разделах представлен ряд алгоритмов поис- ка данных и сортировок, выполняемых на статических структурах данных, так как это характерные операции логического уро

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

Бинарный поиск
Другим относительно простым методом доступа к элементу явля- ется метод бинарного (дихотомического, двоичного) поиска, который выполняется в заведомо упорядоченной последовательно

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

Сортировки выборкой
СОРТИРОВКА ПРОСТОЙ ВЫБОРКОЙ. Данный метод реализует практи- чески "дословно" сформулированную выше стратегию выборки. Порядок алгоритма простой выборки

Еще одна модификация пузырьковой сортировки носит название
шейкер-сортировки. Суть ее состоит в том, что направления прос- мотров чередуются: за просмотром от начала к концу следует прос- мотр от конца к началу входного м

Сортировки включением
СОРТИРОВКА ПРОСТЫМИ ВСТАВКАМИ. Этот метод - "дословная" реа- лизации стратегии включения. Порядок алгоритма сортировки просты- ми вставками - O(N^2), ес

Сортировки распределением.
ПОРАЗРЯДНАЯ ЦИФРОВАЯ СОРТИРОВКА.Алгоритм требует представ- ления ключей сортируемой последовательности в виде чисел в неко- торой системе счисления P. Число прохо

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

Таблицы со справочниками
Одним из способов устранения этого недостатка является метод справочников. Основная таблица содержит записи в произвольном по- рядке. В дополнение к основной строится справочная и

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

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги