|
|
Строка 1: |
Строка 1: |
| {{другие значения|Кортеж (значения)}}
| |
| '''Кортеж''' — упорядоченный набор фиксированной длины. | | '''Кортеж''' — упорядоченный набор фиксированной длины. |
|
| |
| == В математике ==
| |
| Пусть даны множества <math>A_1, A_2, \ldots, A_n</math>, не обязательно различные.
| |
|
| |
| Тогда '''корте́ж длины {{mvar|n}}'''{{sfn|Судоплатов, Овчинникова|2002|с=15}}{{sfn|Белоусов, Ткачев|2004|с=39}}, '''упорядоченный набор длины {{mvar|n}}'''{{sfn|Судоплатов, Овчинникова|2002|с=15}}, '''упорядоченный {{mvar|n}}-набор'''{{sfn|Белоусов, Ткачев|2004|с=39}} или '''{{mvar|n}}-ка'''{{sfn|Судоплатов, Овчинникова|2002|с=15}}{{sfn|Англо-русский словарь математических терминов|1994}} — упорядоченная последовательность из {{mvar|n}} элементов <math>x_1, x_2, \ldots, x_n,</math> где <math>x_i\in A_i</math> для <math>1 \leqslant i \leqslant n.</math> Кортеж обозначается перечислением координат в угловых или круглых скобках{{sfn|Судоплатов, Овчинникова|2002|с=15}}:
| |
| : <math>\langle x_1, x_2, \ldots, x_n\rangle</math>
| |
| или
| |
| : <math>(x_1, x_2, \ldots, x_n).</math>
| |
|
| |
| Элемент <math>x_i</math> называется {{mvar|i}}-й '''координатой'''{{sfn|Судоплатов, Овчинникова|2002|с=15}}{{sfn|Виленкин|1975|с=75}} ('''проекцией'''{{sfn|Белоусов, Ткачев|2004|с=39}}, '''компонентой'''{{sfn|Белоусов, Ткачев|2004|с=39}}{{sfn|Виленкин|1975|с=75}}) кортежа <math>\langle x_1, x_2, \ldots, x_n\rangle.</math>
| |
|
| |
| Число {{mvar|n}} называют '''длиной''' или '''размерностью''' кортежа{{sfn|Белоусов, Ткачев|2004|с=39}}.
| |
|
| |
| Два кортежа равны, если равны их длины и соответствующие элементы{{sfn|Белоусов, Ткачев|2004|с=39}}{{sfn|Виленкин|1975|с=75}}:
| |
| : <math>\langle a_1,\ldots,a_n\rangle = \langle b_1,\ldots,b_n\rangle,</math> если <math>a_i=b_i, i=\overline{1,n}.</math>
| |
|
| |
| Пример кортежа — [[арифметический вектор]]{{sfn|Белоусов, Ткачев|2004|с=39}}.
| |
|
| |
| [[Декартово произведение]] {{mvar|n}} множеств — множество всех кортежей длины {{mvar|n}}, координаты которых взяты из этих множеств{{sfn|Судоплатов, Овчинникова|2002|с=15}}{{sfn|Белоусов, Ткачев|2004|с=39-40}}{{sfn|Кормен, Лейзерсон, Ривест, Штайн|2005|с=1206}}:
| |
| : <math>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|Белоусов, Ткачев|2004|с=39}}
| |
|
| |
| === Определения в теории множеств ===
| |
| В рамках [[теория множеств|теории множеств]] кортежи можно [[математическая индукция|индуктивно]] поставить в соответствие [[Множество (математика)|множествам]]{{sfn|Судоплатов, Овчинникова|2002|с=15}}{{sfn|Hrbacek, Jech|1999|p=17-18}}{{sfn|Кормен, Лейзерсон, Ривест, Штайн|2005|с=1206-1207}}, например, следующим образом{{sfn|Судоплатов, Овчинникова|2002|с=15}}{{sfn|Hrbacek, Jech|1999|p=17-18}}:
| |
| * <math>\langle\rangle\rightleftharpoons\emptyset,</math>
| |
| * <math>\langle x_1\rangle\rightleftharpoons x_1,</math>
| |
| * <math>\langle x_1,x_2\rangle\rightleftharpoons \{\{x_1\},\{x_1,x_2\}\},</math>
| |
| * <math>\langle x_1,x_2,x_3\rangle\rightleftharpoons \langle\langle x_1,x_2\rangle,x_3\rangle,</math>
| |
| * <math>\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>\langle x_1,\ldots,x_n\rangle\rightleftharpoons \langle\langle x_1,\ldots,x_{n-1}\rangle,x_n\rangle.</math>
| |
|
| |
|
| === Определение других объектов через кортежи === | | === Определение других объектов через кортежи === |
| Многие математические объекты формально определяются как кортежи. | | Многие математические объекты формально определяются как кортежи. |
| Например, [[ориентированный граф]] определяется как пара <math>\langle V,E\rangle,</math> где {{mvar|V}} — это множество вершин, а {{mvar|E}} — подмножество [[Упорядоченная пара|пар]] в <math>V\times V,</math> соответствующих дугам графа{{sfn|Кормен, Лейзерсон, Ривест, Штайн|2005|с=1213}}. Точка в {{mvar|n}}-мерном пространстве действительных чисел определяется как кортеж длины {{mvar|n}}, составленный из элементов множества действительных чисел. | | Например, [[ориентированный граф]] определяется как пара |
|
| |
|
| Ориентированный [[мультиграф]] со множеством вершин {{mvar|V}}, множеством дуг {{mvar|E}} и отношением инцидентности <math>P \subseteq V\times E\times V</math> может быть определён как упорядоченная тройка <math>\langle V,E,P\rangle,</math> причём <math>\langle a,e,b\rangle\in P</math> [[тогда и только тогда]], когда дуга {{mvar|e}} выходит из вершины {{mvar|a}} и заходит в вершину {{mvar|b}}{{sfn|Судоплатов, Овчинникова|2002|с=109}}.
| |
|
| |
| == В программировании ==
| |
| {{main|Тип-произведение}}
| |
|
| |
|
| В некоторых [[язык программирования|языках программирования]], например, [[Python]] или [[ML]], кортеж как [[тип данных]] встроен в язык. | | В некоторых [[язык программирования|языках программирования]], например, [[Python]] или [[ML]], кортеж как [[тип данных]] встроен в язык. |
| Пример использования кортежа в языке Python: | | Пример использования кортежа в языке Python: |
| <source lang="python"> | | <syntaxhighlight lang="python" line> |
| | |
| a = (1, 3.14, 'cat') | | a = (1, 3.14, 'cat') |
| print(a[0]) # Напечатать первый элемент кортежа | | print(a[0]) # Напечатать первый элемент кортежа |
| </source> | | </syntaxhighlight> |
|
| |
|
| В языках программирования со статической типизацией кортеж отличается от списка тем, что элементы кортежа могут принадлежать разным [[Тип данных|типам]] и набор таких типов заранее определён типом кортежа, а значит, и размер кортежа также определён. С другой стороны, коллекции (списки, массивы) имеют ограничение по типу хранимых элементов, но не имеют ограничения на длину. Так, например, в языке [[Rust_(язык_программирования)|Rust]] функция может вернуть несколько значений с помощью упаковки в кортеж: | | В языках программирования со статической типизацией кортеж отличается от списка тем, что элементы кортежа могут принадлежать разным [[Тип данных|типам]] и набор таких типов заранее определён типом кортежа, а значит, и размер кортежа также определён. С другой стороны, коллекции (списки, массивы) имеют ограничение по типу хранимых элементов, но не имеют ограничения на длину. Так, например, в языке [[Rust_(язык_программирования)|Rust]] функция может вернуть несколько значений с помощью упаковки в кортеж: |
|
| |
|
| <source lang="rust"> | | <syntaxhighlight lang="rust" line> |
| fn div_with_remainder(a: i32, b: i32) -> (i32, i32, String) { | | fn div_with_remainder(a: i32, b: i32) -> (i32, i32, String) { |
| let tmp = (a/b, a%b); | | let tmp = (a/b, a%b); |
Строка 58: |
Строка 23: |
|
| |
|
| let (res, rem, repr) = div_with_remainder(5,2); | | let (res, rem, repr) = div_with_remainder(5,2); |
| </source> | | </syntaxhighlight> |
| | |
| В [[Функциональное программирование|функциональных]] языках [[Каррирование|некаррированные]] [[Функция (математика)#функции нескольких аргументов|функции нескольких аргументов]] принимают параметры в виде одного аргумента, являющегося кортежем.
| |
| | |
| В языке [[C++]] поддержка кортежей реализована как шаблон класса std::tuple<ref>{{cite web |url=http://cplusplus.com/reference/tuple/ |title=<tuple> |publisher=C++ Reference |access-date=2013-10-11 |archive-date=2013-10-14 |archive-url=https://web.archive.org/web/20131014070644/http://www.cplusplus.com/reference/tuple/ |deadlink=no }}</ref> (начиная с [[C++11]]<ref>{{cite web |url=http://en.cppreference.com/w/cpp/utility/tuple |title=std::tuple |work=cppreference.com |access-date=2013-10-12 |archive-date=2013-10-15 |archive-url=https://web.archive.org/web/20131015083055/http://en.cppreference.com/w/cpp/utility/tuple |deadlink=no }}</ref>) и в библиотеке [[Boost|Boost Tuple Library]]<ref name="boost">{{cite web |url=http://www.boost.org/doc/libs/1_54_0/libs/tuple/doc/tuple_users_guide.html |title=The Boost Tuple Library — 1.54.0 |publisher=Boost C++ Libraries |access-date=2013-10-12 |archive-date=2013-10-14 |archive-url=https://web.archive.org/web/20131014055013/http://www.boost.org/doc/libs/1_54_0/libs/tuple/doc/tuple_users_guide.html |deadlink=no }}</ref>.
| |
| | |
| Кортеж является стандартным типом в платформе [[.NET Framework|.NET]] начиная с версии 4.0<ref name="net4">{{cite web |url=http://msdn.microsoft.com/ru-ru/library/system.tuple.aspx |title=Tuple — класс |publisher=[[MSDN]] |access-date=2011-03-07 |archive-date=2010-09-24 |archive-url=https://web.archive.org/web/20100924081030/http://msdn.microsoft.com/ru-ru/library/system.tuple.aspx |deadlink=no }}</ref>.
| |
| | |
| === В базах данных ===
| |
| В [[Реляционная модель данных|реляционных базах данных]] кортеж — это элемент [[Отношение (реляционная модель)|отношения]]. Для ''N''-арного отношения кортеж представляет собой упорядоченный набор из ''N'' значений, по одному значению для каждого атрибута отношения.
| |
| | |
| == Примечания ==
| |
| {{примечания|2}}
| |
| | |
| == Литература ==
| |
| * {{h|Судоплатов, Овчинникова|2002|3=Судоплатов С. В., Овчинникова Е. В. Элементы дискретной математики: Учебник. — {{М.}}: ИНФРА-М, Новосибирск: Издательство НГТУ, 2002. — 280 с. — (Серия «Высшее образование»). ISBN 5-16-000957-4 (ИНФРА-М), ISBN 5-7782-0332-2 (НГТУ)}}
| |
| * {{книга
| |
| |автор = Белоусов А. И., Ткачев С. Б.
| |
| |заглавие = Дискретная математика: Учебник для вузов
| |
| |ответственный = Под редакцией В. С. Зарубина, А. П. Крищенко
| |
| |издание = 3-е издание, стереотипное
| |
| |место = М.
| |
| |издательство = Издательство МГТУ им. Н. Э. Баумана
| |
| |год = 2004
| |
| |страниц = 744
| |
| |isbn = 5-7038-1769-2
| |
| |ref = Белоусов, Ткачев
| |
| }}
| |
| * {{книга
| |
| |автор = Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн, Клиффорд
| |
| |заглавие = Алгоритмы: построение и анализ
| |
| |издание = 2-е издание
| |
| |оригинал = Introduction to Algorithms
| |
| |место = М.
| |
| |издательство = {{ifexist|Издательский дом «Вильямс»}}
| |
| |год = 2005
| |
| |страниц = 1296
| |
| |isbn = 5-8459-0857-4
| |
| |ref = Кормен, Лейзерсон, Ривест, Штайн
| |
| }}
| |
| * {{книга
| |
| |автор = Н. Я. Виленкин
| |
| |заглавие = Популярная комбинаторика
| |
| |издательство = Наука
| |
| |место = М.
| |
| |год = 1975
| |
| |ref = Виленкин
| |
| }}
| |
| * {{книга
| |
| |заглавие = Англо-русский словарь математических терминов
| |
| |ответственный = Под ред. П. С. Александрова
| |
| |издание = 2-е, исправл. и дополн. изд.
| |
| |место = М.
| |
| |издательство = Мир
| |
| |год = 1994
| |
| |страниц = 416
| |
| |isbn = 5-03-002952-4
| |
| |ref = Англо-русский словарь математических терминов
| |
| }}
| |
| * {{книга
| |
| |автор = Karel Hrbacek, Thomas Jech
| |
| |заглавие = Introduction to Set Theory
| |
| |издание = Third edition, revised and expanded
| |
| |год = 1999
| |
| |isbn = 0-8247-7915-0
| |
| |ref = Hrbacek, Jech
| |
| }}
| |
| | |
| == Ссылки ==
| |
| * [http://www.opennet.ru/docs/RUS/diveinto_python/diveinto_python-python.html.gz#odbchelper_tuple_html В глубь языка Python: 1.9. Кортежи]
| |
| | |
| {{Типы данных}}
| |
|
| |
|
| [[Категория:Теория множеств]]
| |
| [[Категория:Реляционная модель данных]]
| |
| [[Категория:Структуры данных]] | | [[Категория:Структуры данных]] |
| [[Категория:Статьи с примерами кода Python]]
| |