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

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

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

В математике

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

Тогда корте́ж длины n[1][2], упорядоченный набор длины n[1], упорядоченный n-набор[2] или n-ка[1][3] — упорядоченная последовательность из n элементов [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] Кортеж обозначается перечислением координат в угловых или круглых скобках[1]:

[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] называется iкоординатой[1][4] (проекцией[2], компонентой[2][4]) кортежа [math]\displaystyle{ \langle x_1, x_2, \ldots, x_n\rangle. }[/math]

Число n называют длиной или размерностью кортежа[2].

Два кортежа равны, если равны их длины и соответствующие элементы[2][4]:

[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]

Пример кортежа — арифметический вектор[2].

Декартово произведение n множеств — множество всех кортежей длины n, координаты которых взяты из этих множеств[1][5][6]:

[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, … также носят названия «упорядоченная пара», «упорядоченная тройка», «упорядоченная четвёрка», «упорядоченная пятёрка» и т. д.[2]

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

В рамках теории множеств кортежи можно индуктивно поставить в соответствие множествам[1][7][8], например, следующим образом[1][7]:

  • [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] где V — это множество вершин, а E — подмножество пар в [math]\displaystyle{ V\times V, }[/math] соответствующих дугам графа[9]. Точка в n-мерном пространстве действительных чисел определяется как кортеж длины n, составленный из элементов множества действительных чисел.

Ориентированный мультиграф со множеством вершин V, множеством дуг E и отношением инцидентности [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] тогда и только тогда, когда дуга 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[11] (начиная с C++11[12]) и в библиотеке Boost Tuple Library[13].

Кортеж является стандартным типом в платформе .NET начиная с версии 4.0[14].

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

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

Примечания

  1. 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 Судоплатов, Овчинникова, 2002, с. 15.
  2. 2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 Белоусов, Ткачев, 2004, с. 39.
  3. Англо-русский словарь математических терминов, 1994.
  4. 4,0 4,1 4,2 Виленкин, 1975, с. 75.
  5. Белоусов, Ткачев, 2004, с. 39-40.
  6. Кормен, Лейзерсон, Ривест, Штайн, 2005, с. 1206.
  7. 7,0 7,1 Hrbacek, Jech, 1999, p. 17-18.
  8. Кормен, Лейзерсон, Ривест, Штайн, 2005, с. 1206-1207.
  9. Кормен, Лейзерсон, Ривест, Штайн, 2005, с. 1213.
  10. Судоплатов, Овчинникова, 2002, с. 109.
  11. <tuple>. C++ Reference. Дата обращения: 11 октября 2013. Архивировано 14 октября 2013 года.
  12. std::tuple. cppreference.com. Дата обращения: 12 октября 2013. Архивировано 15 октября 2013 года.
  13. The Boost Tuple Library — 1.54.0. Boost C++ Libraries. Дата обращения: 12 октября 2013. Архивировано 14 октября 2013 года.
  14. Tuple — класс. MSDN. Дата обращения: 7 марта 2011. Архивировано 24 сентября 2010 года.

Литература

  • Судоплатов С. В., Овчинникова Е. В. Элементы дискретной математики: Учебник. — М.: ИНФРА-М, Новосибирск: Издательство НГТУ, 2002. — 280 с. — (Серия «Высшее образование»). ISBN 5-16-000957-4 (ИНФРА-М), ISBN 5-7782-0332-2 (НГТУ)
  • Белоусов А. И., Ткачев С. Б. Дискретная математика: Учебник для вузов / Под редакцией В. С. Зарубина, А. П. Крищенко. — 3-е издание, стереотипное. — М.: Издательство МГТУ им. Н. Э. Баумана, 2004. — 744 с. — ISBN 5-7038-1769-2.
  • Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн, Клиффорд. Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-е издание. — М.: Издательский дом «Вильямс», 2005. — 1296 с. — ISBN 5-8459-0857-4.
  • Н. Я. Виленкин. Популярная комбинаторика. — М.: Наука, 1975.
  • Англо-русский словарь математических терминов / Под ред. П. С. Александрова. — 2-е, исправл. и дополн. изд.. — М.: Мир, 1994. — 416 с. — ISBN 5-03-002952-4.
  • Karel Hrbacek, Thomas Jech. Introduction to Set Theory. — Third edition, revised and expanded. — 1999. — ISBN 0-8247-7915-0.

Ссылки