Кортеж (информатика)

Материал из Поле цифровой дидактики
Версия от 10:30, 19 октября 2022; Patarakin (обсуждение | вклад) (1 версия импортирована)

Шаблон:Другие значения Кортеж — упорядоченный набор фиксированной длины.

В математике

Пусть даны множества [math]\displaystyle{ A_1, A_2, \ldots, A_n }[/math], не обязательно различные.

Тогда корте́ж длины Шаблон:MvarШаблон:SfnШаблон:Sfn, упорядоченный набор длины Шаблон:MvarШаблон:Sfn, упорядоченный Шаблон:Mvar-наборШаблон:Sfn или Шаблон:Mvar-каШаблон:SfnШаблон:Sfn — упорядоченная последовательность из Шаблон:Mvar элементов [math]\displaystyle{ x_1, x_2, \ldots, x_n, }[/math] где [math]\displaystyle{ x_i\in A_i }[/math] для [math]\displaystyle{ 1 \leqslant i \leqslant n. }[/math] Кортеж обозначается перечислением координат в угловых или круглых скобкахШаблон:Sfn:

[math]\displaystyle{ \langle x_1, x_2, \ldots, x_n\rangle }[/math]

или

[math]\displaystyle{ (x_1, x_2, \ldots, x_n). }[/math]

Элемент [math]\displaystyle{ x_i }[/math] называется Шаблон:MvarкоординатойШаблон:SfnШаблон:Sfn (проекциейШаблон:Sfn, компонентойШаблон:SfnШаблон:Sfn) кортежа [math]\displaystyle{ \langle x_1, x_2, \ldots, x_n\rangle. }[/math]

Число Шаблон:Mvar называют длиной или размерностью кортежаШаблон:Sfn.

Два кортежа равны, если равны их длины и соответствующие элементыШаблон:SfnШаблон:Sfn:

[math]\displaystyle{ \langle a_1,\ldots,a_n\rangle = \langle b_1,\ldots,b_n\rangle, }[/math] если [math]\displaystyle{ a_i=b_i, i=\overline{1,n}. }[/math]

Пример кортежа — арифметический векторШаблон:Sfn.

Декартово произведение Шаблон:Mvar множеств — множество всех кортежей длины Шаблон:Mvar, координаты которых взяты из этих множествШаблон:SfnШаблон:SfnШаблон:Sfn:

[math]\displaystyle{ A_1\times\ldots\times A_n = \{\langle x_1,\ldots, x_n\rangle\mid x_i\in A_i,i=\overline{1,n}\}. }[/math]

Кортежи длины 2, 3, 4, 5, … также носят названия «упорядоченная пара», «упорядоченная тройка», «упорядоченная четвёрка», «упорядоченная пятёрка» Шаблон:ИтдШаблон:Sfn

Определения в теории множеств

В рамках теории множеств кортежи можно индуктивно поставить в соответствие множествамШаблон:SfnШаблон:SfnШаблон:Sfn, например, следующим образомШаблон:SfnШаблон:Sfn:

  • [math]\displaystyle{ \langle\rangle\rightleftharpoons\emptyset, }[/math]
  • [math]\displaystyle{ \langle x_1\rangle\rightleftharpoons x_1, }[/math]
  • [math]\displaystyle{ \langle x_1,x_2\rangle\rightleftharpoons \{\{x_1\},\{x_1,x_2\}\}, }[/math]
  • [math]\displaystyle{ \langle x_1,x_2,x_3\rangle\rightleftharpoons \langle\langle x_1,x_2\rangle,x_3\rangle, }[/math]
  • [math]\displaystyle{ \langle x_1,x_2,x_3,x_4\rangle\rightleftharpoons \langle\langle x_1,x_2,x_3\rangle,x_4\rangle, \ldots }[/math]
  • [math]\displaystyle{ \langle x_1,\ldots,x_n\rangle\rightleftharpoons \langle\langle x_1,\ldots,x_{n-1}\rangle,x_n\rangle. }[/math]

Определение других объектов через кортежи

Многие математические объекты формально определяются как кортежи. Например, ориентированный граф определяется как пара [math]\displaystyle{ \langle V,E\rangle, }[/math] где Шаблон:Mvar — это множество вершин, а Шаблон:Mvar — подмножество пар в [math]\displaystyle{ V\times V, }[/math] соответствующих дугам графаШаблон:Sfn. Точка в Шаблон:Mvar-мерном пространстве действительных чисел определяется как кортеж длины Шаблон:Mvar, составленный из элементов множества действительных чисел.

Ориентированный мультиграф со множеством вершин Шаблон:Mvar, множеством дуг Шаблон:Mvar и отношением инцидентности [math]\displaystyle{ P \subseteq V\times E\times V }[/math] может быть определён как упорядоченная тройка [math]\displaystyle{ \langle V,E,P\rangle, }[/math] причём [math]\displaystyle{ \langle a,e,b\rangle\in P }[/math] тогда и только тогда, когда дуга Шаблон:Mvar выходит из вершины Шаблон:Mvar и заходит в вершину Шаблон:MvarШаблон:Sfn.

В программировании

Шаблон:Main

В некоторых языках программирования, например, 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<ref>Шаблон:Cite web</ref> (начиная с C++11<ref>Шаблон:Cite web</ref>) и в библиотеке Boost Tuple Library<ref name="boost">Шаблон:Cite web</ref>.

Кортеж является стандартным типом в платформе .NET начиная с версии 4.0<ref name="net4">Шаблон:Cite web</ref>.

В базах данных

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

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Типы данных