Кортеж (информатика): различия между версиями

Материал из Поле цифровой дидактики
м (1 версия импортирована)
Строка 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,&nbsp;… также носят названия «[[упорядоченная пара]]», «упорядоченная тройка», «упорядоченная четвёрка», «упорядоченная пятёрка» {{итд}}{{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=&lt;tuple&gt; |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]]

Версия 12:29, 19 октября 2022

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

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

Многие математические объекты формально определяются как кортежи. Например, ориентированный граф определяется как пара


В некоторых языках программирования, например, 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);