LINUX.ORG.RU
ФорумTalks

Терминология CS: массив

 , ,


1

3

А вам когда-нибудь доводилось искать/придумывать точные определения для АТД?

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

Разные уважаемые авторы (Кнут и пр.) дают разные определения, поэтому если серия лекций идет по какой-то конкретной книге, то на нее и ссылаются в плане определения.

Хотя, конечно, хотелось бы какой-то строгости, желательно, математической.

Стандарты языков обычно ссылаются на стандарт

ISO/IEC 2382:2015 - Information technology — Vocabulary,

у которого есть и русский перевод (хотя формально переводом это сложно назвать)

ГОСТ 33707-2016 (ISO/IEC 2382:2015) Информационные технологии СЛОВАРЬ

====

Пример определения «array»:

ISO:

2122360 array

aggregate that is an instance of an array type and each element or appropriate group of elements in which may be referenced randomly and independently of the others

Note 1 to entry: array: term and definition standardized by ISO/IEC [ISO/IEC 2382-15:1999].

Note 2 to entry: 15.03.08 (2382)

[SOURCE:ISO-IEC-2382-15 * 1999 * * * ]

соотв. нужно еще определение array type:

2122392 array type
composite type whose components are the same data type

Note 1 to entry: Array types may be organized and referenced as if the components were arranged in columns, rows, etc.

Note 2 to entry: array type: term and definition standardized by ISO/IEC [ISO/IEC 2382-15:1999].

Note 3 to entry: 15.04.19 (2382)

[SOURCE:ISO-IEC-2382-15 * 1999 * * * ]

и определение aggregate:

2122358 aggregate

structured collection of components, where the components may have the same or different data structure, and where the data structure of the collection itself may also be a constituent part of a corresponding composite type

Note 1 to entry: aggregate: term and definition standardized by ISO/IEC [ISO/IEC 2382-15:1999].

Note 2 to entry: 15.03.06 (2382)

[SOURCE:ISO-IEC-2382-15 * 1999 * * * ]

ГОСТ:

4.656 массив данных: Конструкция данных, компоненты которой идентичны по своим характеристикам и перечисляются как значения функции от фиксированного количества целочисленных аргументов.

Примечание - Количество аргументов определяет размерность массива.

(en array)

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

Но российский вариант определения массива по госту поверг меня в предшоковое состояние. Это же хрень какая-то, а не определение?

PS:

ГОСТ

ISO

★★★★

Последнее исправление: soomrack (всего исправлений: 1)

Ответ на: комментарий от AntonI

Для обычного в общем случае да.

В чём отличие от разрежённого массива? И там, и там не все ключи (индексы) могут быть связаны со значениями.

Я хочу сказать, что это хоть и слегка разные виды (с разными дополнительными ограничениями), но одного и того же абстрактного типа данных — потому что операции над ними одинаковые. То есть доступ по индексу за О(1).

Вот у абстрактного стека, к примеру, операции другие, его массивом никак не назовёшь.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 3)
Ответ на: комментарий от Nervous

потому что операции над ними одинаковые

Да не могут же в реальном мире они быть одинаковые.

Когда я пишу a['b'] - я автоматом понимаю, что где-то там в кишках есть отдельно b = 1 и отдельно a[1]. Как минимум две операции чтения должны быть.

Правда пару дней назад основательно завис над uint256. Тоже по идее - такого не может быть в реальном железе. Только какие-то программные костыли. А оно есть. И даже судя по всему работает со смыслом.

Toxo2 ★★★★
()
Последнее исправление: Toxo2 (всего исправлений: 1)
Ответ на: комментарий от Nervous

И там, и там не все ключи (индексы) могут быть связаны со значениями.

У обычного массива валидные ключи всегда лежат в диапазоне 0:N. У ассоциативного нет.

доступ по индексу за О(1).

У ассоциативного массива доступ хуже чем О(1). Я третий раз это пишу, Вы третий раз это игнорируете. Не надо так…:-(

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

Это как минимум.

И вообще, чем отличается кошка от собаки? И у той и у той усы-лапы-хвост…

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 2)
Ответ на: комментарий от Toxo2

Когда я пишу a[‘b’] - я автоматом понимаю, что где-то там в кишках есть отдельно b = 1 и отдельно a[1]. Как минимум две операции чтения должны быть.

Внезапно, ‘b’ - это уже искаробки чиселка которая может быть ключем в векторе:-)

AntonI ★★★★
()
Ответ на: комментарий от AntonI

У обычного массива валидные ключи всегда лежат в диапазоне 0:N.

Так и у разрежённого тоже. Просто не у всех есть значения.

У ассоциативного нет.

У ассоциативного массива доступ хуже чем О(1).

у ассоциативного массива может не быть

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

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

Но вот скажи — чем обычный массив не ассоциативный? %) Быстрый доступ по ключу у него есть. Если массив разрежённый, то и вставка по произвольному ключу тоже есть. (Вы можете выбрать любой, совершенно произвольный ключ, если он натуральное число.) Получается такой ассоциативный массив для бедных.

Конечно, в архитектуре и модели памяти, подразумеваемых по умолчанию, это будет не слишком эффективно по памяти, но разве это единственная возможная архитектура?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 5)
Ответ на: комментарий от Toxo2

Когда я пишу a[‘b’] - я автоматом понимаю, что где-то там в кишках есть отдельно b = 1 и отдельно a[1]

Ну мы же об абстрактных типах данных говорим — о математических моделях, а не реальных структурах данных, которые они моделируют. В одной архитектуре это реализовано так, в другой может быть этак. Где-то элементы массива идут подряд в памяти, где-то вообще нет такого понятия «подряд в памяти» (ассоциативная память).

Кто-то считает овец, загибая пальцы, кто-то — перекладывая камушки. Математическое понятие целого числа не должно зависеть от количества пальцев на руке и цвета камушков, не так ли?

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

Так и у разрежённого тоже.

Нет. Здесь N - число элементов имеющих значение.

Но из массивов не выпилили

обычный МАССИВ, ассоциативный МАССИВ - спасибо, Кэп!;-)

чем обычный массив не ассоциативный?

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

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

AntonI ★★★★
()
Ответ на: комментарий от AntonI

Нет. Здесь N - число элементов имеющих значение.

Вот есть сплошной массив [1, 2, 3] и разрежённый [1, пусто, 3]. У обоих валидные ключи лежат в диапазоне 0-2, просто у второго они не все валидные. Сплошной массив накладывает дополнительные ограничения, значит, разрежённый массив — более общее понятие. Более Ъ массив с математической точки зрения, чем сплошной.

Ассоциативный ещё более Ъ — снимается ограничение по типу ключа. Как тебе такое, Леонард Эйлер? %)

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

Хороший тред.

Лишний раз подтверждает необходимость наличия баз знаний.

Вот откуда ИИ черпает знание о термине массив?
Если например она не правильно трактует этот термин, то ...

Что касаемо вопросов «обучения», то здесь тоже много вопросов.

Каких?

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

Формализованные базы знаний нужны.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 9)
Ответ на: комментарий от Nervous

разрежённый массив — более общее понятие

Да. Но платой за общность, как обычно, является падение производительности.

Ассоциативный ещё более Ъ — снимается ограничение по типу ключа.

Не снимаются а ослабляются.

AntonI ★★★★
()
Ответ на: комментарий от soomrack

ассоциативный массив (индексированный массив, у которого индексация – биекция)

Значения ведь могут повторяться, взаимно однозначного соответствия нет.

Но в общем да, подход здравый.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

Значения ведь могут повторяться, взаимно однозначного соответствия нет.

Биекция на элементы массива, а не на значения элементов.

soomrack ★★★★
() автор топика
Ответ на: комментарий от soomrack

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

ассоциативный массив (индексированный массив, у которого индексация – биекция)

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

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

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

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

soomrack ★★★★
() автор топика
Ответ на: комментарий от soomrack

На мой взгляд, требование взаимной однозначности для индексированного массива избыточное.

Так и для ассоциативного массива это тоже верно. Иногда удобно иметь несколько ключей для одного элемента.

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

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Nervous

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

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

soomrack ★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)