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