Лекция
кортеж (tuple)— упорядоченный набор фиксированной длины. Кортеж - это упорядоченный набор элементов, которые могут быть различных типов. По сути, это обобщение понятия пары, тройки и т.д. на произвольное число элементов. Кортежи широко используются как в математике, так и в программировании.
Термин возник как абстракция последовательности: single, couple / double, triple, quadruple, quintuple, sextuple, septuple, octuple, ..., n ‑tuple, ..., где префиксы взяты из латинских названий цифры. Уникальный 0-кортеж называется нулевым кортежем или пустым кортежем. Кортеж из 1 называется одиночным (или одноэлементным), кортеж из двух элементов называется упорядоченной парой или парой, а набор из трех элементов называется тройкой (или тройкой). Число n может быть любым целым неотрицательным числом . Например, комплексное число может быть представлено как кортеж из двух вещественных чисел, кватернион может быть представлен как кортеж из четырех, октонион может быть представлен как кортеж из восьми, а седенион можно представить в виде 16-кратного кортежа.
Хотя в этих случаях суффикс трактуется как кратный , исходный суффикс был кратным, например, «тройной» (тройной) или «десятикратный» (десятикратный). Это происходит от средневекового латинского plus (что означает «больше»), связанного с греческим ‑πλοῦς, который заменил классический и позднеантичный ‑plex (что означает «сложенный»), как в «дуплекс».
Есть несколько определений кортежей, которые придают им свойства, описанные в предыдущем разделе.
Если мы имеем дело с множествами, п -кратным можно рассматривать как функцию , F , чей домен подразумевается набор кортежа по индексам элементов, X , и чья область значений, Y , является множеством кортежей по элементам. Формально:
где:
В несколько менее формальных обозначениях это говорит:
Используя это определение -наборы, то есть только один -tuple, пустая функция .
Другой способ моделирования кортежей в Теории множеств - это вложенные упорядоченные пары . Этот подход предполагает, что понятие упорядоченной пары уже определено; таким образом, 2-кортеж
Это определение может быть применено рекурсивно к ( n - 1) -набору:
Так, например:
Вариант этого определения начинается с «отслаивания» элементов с другого конца:
Это определение можно применить рекурсивно:
Так, например:
Используя представление Куратовского для упорядоченной пары , второе определение выше может быть переформулировано в терминах чистой теории множеств :
В этой формулировке:
имеем
В дискретной математике , особенно в комбинаторике и теории конечных вероятностей , n -наборы возникают в контексте различных задач подсчета и рассматриваются более неформально как упорядоченные списки длины n . n -наборы, элементы которых происходят из набора из m элементов, также называются аранжировками с повторением , перестановками мультимножества и, в некоторых неанглоязычных источниках, вариациями с повторением . Количество n -элементов m -множества равно m n . Это следует из комбинаторнойправило продукта . Если S является конечным множеством мощности т , это число мощности на п -кратной декартову мощность S × S × ... S . Кортежи являются элементами этого набора продуктов.
В математике , А кортеж является конечным упорядоченным списком (последовательности) элементов . П -кратного представляет собой последовательность (или упорядоченный список) из п элементов, где п является неотрицательным целым числом . Есть только один 0-кортеж, называемый пустым кортежем . П -кратный является определяются индуктивно с использованием конструкции упорядоченной пары .
Математики обычно пишут кортежи, перечисляя элементы в круглых скобках « () » и разделяя их запятыми; например, (2, 7, 4, 1, 7) обозначает 5-кортеж. Иногда для окружения элементов используются другие символы, например квадратные скобки «[]» или угловые скобки «〈〉». Фигурные скобки «{}» используются только при определении массивов в некоторых языках программирования, но не в математических выражениях, поскольку они являются стандартной записью для множеств . Термин " кортеж" часто встречается при обсуждении других математических объектов, например векторов .
В информатике кортежи бывают разных форм. Большинство типизированных функционального программирования языков реализация кортежи непосредственно в качестве видов продукции , тесно связанно с алгебраическими типами данных , сопоставлением с образцом , и деструктурирующими присваиваниями . Многие языки программирования предлагают альтернативу кортежам, известным как типы записей , с неупорядоченными элементами, доступ к которым осуществляется по метке. Некоторые языки программирования объединяют упорядоченные типы кортежей и неупорядоченные типы записей в единую конструкцию, как в структурах C и записях Haskell. Реляционные базы данныхмогут формально идентифицировать свои строки (записи) как кортежи .
Кортежи также встречаются в реляционной алгебре ; при программировании семантической сети с помощью Resource Description Framework (RDF); в лингвистике ; и в философии .
Пусть даны множества , не обязательно различные.
Тогда корте́ж длины n , упорядоченный набор длины n , упорядоченный n-набор или n-ка — упорядоченная последовательность из n элементов где для Кортеж обозначается перечислением координат в угловых или круглых скобках :
или
Элемент называется i-й координатой (проекцией , компонентой ) кортежа
Число n называют длиной или размерностью кортежа .
Два кортежа равны, если равны их длины и соответствующие элементы :
если
Пример кортежа — арифметический вектор
Декартово произведение n множеств — множество всех кортежей длины n, координаты которых взяты из этих множеств :
Кортежи длины 2, 3, 4, 5, … также носят названия «упорядоченная пара», «упорядоченная тройка», «упорядоченная четверка», «упорядоченная пятерка» и т. д.
В рамках теории множеств кортежи можно индуктивно поставить в соответствие множествам , например, следующим образом :
Многие математические объекты формально определяются как кортежи. Например, ориентированный граф определяется как пара где V — это множество вершин, а E — подмножество пар в соответствующих дугам графа . Точка в n-мерном пространстве действительных чисел определяется как кортеж длины n, составленный из элементов множества действительных чисел.
Ориентированный мультиграф со множеством вершин V, множеством дуг E и отношением инцидентности может быть определен как упорядоченная тройка причем тогда и только тогда, когда дуга e выходит из вершины a и заходит в вершину b[10].
В некоторых языках программирования, например, Python или ML, кортеж как тип данных встроен в язык. Пример использования кортежа в языке Python:
a = (1, 3.14, 'cat')
print(a[0]) # Напечатать первый элемент кортежа
В языках программирования со статической типизацией кортеж отличается от списка тем, что элементы кортежа могут принадлежать разным типам и набор таких типов заранее определен типом кортежа, а значит, и размер кортежа также определен. С другой стороны, коллекции (списки, массивы) имеют ограничение по типу хранимых элементов, но не имеют ограничения на длину. Так, например, в языке Rust функция может вернуть несколько значений с помощью упаковки в кортеж:
fn div_with_remainder(a: i32, b: i32) -> (i32, i32, String) {
let tmp = (a/b, a%b);
(tmp.0, tmp.1, format!("{} + {}", tmp.0, tmp.1))
}
let (res, rem, repr) = div_with_remainder(5,2);
В функциональных языках некаррированные функции нескольких аргументов принимают параметры в виде одного аргумента, являющегося кортежем.
В языке C++ поддержка кортежей реализована как шаблон класса std::tuple ] (начиная с C++11) и в библиотеке Boost Tuple Library[13].
Кортеж является стандартным типом в платформе .NET начиная с версии 4.0
Функция кортежей обеспечивает краткий синтаксис для группировки нескольких элементов данных в облегченную структуру данных. В следующем примере показано, как можно объявить переменную кортежа, инициализировать ее и получить доступ к ее членам данных:
(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
// Output:
// Tuple with elements 4.5 and 3.
(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
// Output:
// Sum of 3 elements is 4.5.
Как показывает предыдущий пример, для определения типа кортежа вы указываете типы всех его членов данных и, по желанию, имена полей . Вы не можете определить методы в типе кортежа, но вы можете использовать методы, предоставляемые .NET, как показано в следующем примере:
(double, int) t = (4.5, 3);
Console.WriteLine(t.ToString());
Console.WriteLine($"Hash code of {t} is {t.GetHashCode()}.");
// Output:
// (4.5, 3)
// Hash code of (4.5, 3) is 718460086.
Типы кортежей поддерживают операторы равенства ==
и !=
. Для получения дополнительной информации см. раздел Равенство кортежей .
Типы кортежей являются типами значений ; элементы кортежей являются открытыми полями. Это делает кортежи изменяемыми типами значений.
Вы можете определить кортежи с произвольно большим количеством элементов:
var t =
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26);
Console.WriteLine(t.Item26); // output: 26
Один из наиболее распространенных вариантов использования кортежей — это тип возвращаемого значения метода. То есть, вместо определения out
параметров метода , вы можете сгруппировать результаты метода в тип возвращаемого значения кортежа,
В реляционных базах данных кортеж — это элемент отношения. Для N-арного отношения кортеж представляет собой упорядоченный набор из N значений, по одному значению для каждого атрибута отношения.
Кортеж, соответствующий данной схеме отношения, - это множество пар {имя атрибута, значение}, которое содержит одно вхождение каждого имени атрибута, принадлежащего схеме отношения. "Значение" является допустимым значением домена данного атрибута (или типа данных, если понятие домена не поддерживается). Тем самым, степень или "арность" кортежа, т.е. число элементов в нем, совпадает с "арностью" соответствующей схемы отношения. Попросту говоря, кортеж - это набор именованных значений заданного типа.
Отношение - это множество кортежей, соответствующих одной схеме отношения. Иногда, чтобы не путаться, говорят "отношение-схема" и "отношение-экземпляр", иногда схему отношения называют заголовком отношения, а отношение как набор кортежей - телом отношения. На самом деле, понятие схемы отношения ближе всего к понятию структурного типа данных в языках программирования. Было бы вполне логично разрешать отдельно определять схему отношения, а затем одно или несколько отношений с данной схемой.
Однако в реляционных базах данных это не принято. Имя схемы отношения в таких базах данных всегда совпадает с именем соответствующего отношения-экземпляра. В классических реляционных базах данных после определения схемы базы данных изменяются только отношения-экземпляры. В них могут появляться новые и удаляться или модифицироваться существующие кортежи. Однако во многих реализациях допускается и изменение схемы базы данных: определение новых и изменение существующих схем отношения. Это принято называть эволюцией схемы базы данных.
Обычным житейским представлением отношения является таблица, заголовком которой является схема отношения, а строками - кортежи отношения-экземпляра; в этом случае имена атрибутов именуют столбцы этой таблицы. Поэтому иногда говорят "столбец таблицы", имея в виду "атрибут отношения". Когда мы перейдем к рассмотрению практических вопросов организации реляционных баз данных и средств управления, мы будем использовать эту житейскую терминологию. Этой терминологии придерживаются в большинстве коммерческих реляционных СУБД.
Реляционная база данных - это набор отношений, имена которых совпадают с именами схем отношений в схеме БД.
Как видно, основные структурные понятия реляционной модели данных (если не считать понятия домена) имеют очень простую интуитивную интерпретацию, хотя в теории реляционных БД все они определяются абсолютно формально и точно.
Отношение – Таблица (иногда Файл),
Кортеж – Строка (иногда Запись),
Кортежи имеют широкое применение в программировании:
В математике кортежи используются для представления точек в многомерном пространстве, векторов, матриц и других математических объектов.
Кортежи являются универсальным инструментом для представления упорядоченных коллекций данных. Их неизменяемость делает их безопасными и эффективными для использования в различных алгоритмах и структурах данных. Понимание кортежей является важным для любого программиста.
Комментарии
Оставить комментарий
Структуры данных
Термины: Структуры данных