N-torka
U matematici, n-torka (engl. tuple) je konačan niz (također poznat kao "uređena lista") od n objekata, svaki od kojih je specificiranog tipa. Primjerice, "četvorka" s komponentama OSOBA, DAN, MJESEC i GODINA se može rabiti za bilježenje zapisa da je određena osoba rođena određenog dana određenog mjeseca određene godine.
N-torke se rabe za opis matematičkih objekata koji se sastoje od specificiranih dijelova. Primjerice, usmjereni graf je definiran kao n-torka (V, E) pri čemu je V skup vrhova (čvorova) i E podskup od V × V koji označuje bridove. Tip prvog objekta jest "skup vrhova" dok je tip drugog "skup bridova".
Naziv "torka" se u hrvatskom jeziku ne rabi, već gotovo isključivo "n-torka" označujući duljinu od n elemenata. 2-torka se zove dvojka ili par, 3-torka je trojka i tako dalje. N može biti bilo koji nenegativni cijeli broj. Primjerice, kompleksni broj može biti predstavljen dvojkom, i kvaternion može biti predstavljen četvorkom.
Glavna svojstva koja razlikuju n-torku od, na primjer, skupa, su:
- n-torka može sadržavati objekt više nego jednom, i
- objekti se mogu pojavljivati u određenom redoslijedu.
Valja uočiti da (1) razlikuje n-torku od uređenog skupa i da (2) razlikuje n-torku od multiskupa. Ovo je često formalizirano dajući sljedeće pravilo za jednakost dvaju n-torki:
- (a1, a2, …,an) = (b1, b2, …, bn) ↔ a1 = b1, a2 = b2, …, an = bn.
Budući da je n-torka indeksirana brojevima 1…n (ili 0…n-1), može se shvatiti kao funkcija koja preslikava iz podskupa od ℕ:
- (a1, a2, …,an) ≡ fa: ℕn → A: i ↦ ai.
Drugi je način formaliziranja n-torki preslikavanjem u primitivnije konstrukte teorije skupova kao što je uređeni par. Primjerice, n-torka (s n > 2) se može definirati kao uređen par svojeg prvog elementa i (n−1)-torke koja sadrži sve ostale:
- (a1, a2, …, an) = (a1, (a2, …, an))
Rabeći uobičajenu definiciju uređenog para teorijom skupova i predstavljajući praznu n-torku (0-torku) praznim skupom, slijedi sljedeća induktivna definicija:
- 0-torka (tj. prazna n-torka) je predstavljena sa ∅
- ako je x n-torka tada {{a}, {a, x}} je (n + 1)-torka.
Rabeći ovu definiciju, (1,2,2) bi bilo
- (1,(2,(2,���))) = (1,(2, {{2}, {2, ∅}} )) = (1, {{2}, {2, {{2}, {2, ∅}}}} ) = {{1}, {1, {{2}, {2, {{2}, {2, ∅}}}}}}
Ovdje postoji važna sličnost s Lispom koji je izvorno koristio apstrakciju uređenog para kako bi induktivno stvorio strukture n-torki i listi:
- istaknuti simbol NIL predstavlja praznu listu;
- ako je X lista i A proizvoljna vrijednost, tada par (A X) predstavlja listu s glavom (tj. prvim elementom) A i repom (tj. ostatkom liste bez glave) X.
U računarstvu, n-torka ima tri različita značenja. Tipično u funkcijskim i nekim drugim programskim jezicima, n-torka je podatkovni objekt koji sadrži nekoliko drugih objekata, sličan matematičkoj n-torci. Takav objekt je također poznat kao zapis.[1]
Programski jezik Eiffel ima ugrađenu podršku za n-torke. Tip
TUPLE [X, Y, Z]
ima, kao svoje vrijednosti, n-torke od tri ili više elemenata, od kojih je prvi tipa X, drugi tipa Y i treći tipa Z. Ovo također može biti napisano rabeći oznake (tag):
TUPLE [oznaka1: X, oznaka2: Y, oznaka3: Z]
bez utjecaja na rezultirajući tip. Stvarna n-torka, koja odgovara ovom tipu, je zapisana rabeći uglate zagrade, primjerice
[x1, y1, z1]
pri čemu je x1 tipa X itd. Ako je t takva n-torka, njenim se elementima može pristupiti rabeći oznake, npr. t.oznaka1 itd.; kao i postaviti na isti način, npr. t.oznaka2 := y2 što zamjenjuje drugi element, tipa Y, vrijednošću y2. Vrijednosti tipa TUPLE [X, Y, Z] može biti dodijeljena varijabla istog tipa ali također i ona tipa TUPLE [X, Y] ili TUPLE [X], ili samo TUPLE što pokriva sve n-torke. Ovo se može ostvariti zahvaljujući definiciji da TUPLE [X, Y], primjerice, pokriva nizove od barem (mjesto točno) dva elementa, za prva dva od dana tipa. Tipovi n-torki se dobro uklapaju u objektno orijentirani kontekst, gdje štede pisanje u klasu u slučaju gdje je sve što je potrebno jest jednostavni niz vrijednosti s pridruženim mehanizmima dohvata i postavljanja za svako polje.
U programskom jeziku C++ 11 podržan je tuple
.[2]
#include <tuple>
#include <iostream>
#include <string>
int main()
{
// izradi novi 'tuple' s tri komponente (decimalni broj 3.8, znak A, niz znakova "Lisa Simpson")
auto student0 = std::make_tuple(3.8, 'A', "Lisa Simpson");
std::cout << "ID: 0, "
// ispisi 0. clan student0
<< "GPA: " << std::get<0>(student0) << ", "
// ispisi 1. clan student0
<< "grade: " << std::get<1>(student0) << ", "
// ispisi 2. clan student0
<< "name: " << std::get<2>(student0) << '\n';
double gpa1;
char grade1;
std::string name1;
// izradi 'tuple' s tri komponente (decimalni broj 2.9, znak C, niz znakova "Milhouse Van Houten")
// zatim raspodijeli komponente po varijablama gpa1 (tipa decimalni broj), grade1 (tipa znak) te name1 (tipa niz znakova)
std::tie(gpa1, grade1, name1) = std::make_tuple(2.9, 'C', "Milhouse Van Houten");
std::cout << "ID: 1, "
// ispisi vrijednost varijable gpa1
<< "GPA: " << gpa1 << ", "
// ispisi vrijednost varijable grade1
<< "grade: " << grade1 << ", "
// ispisi vrijednost varijable name1
<< "name: " << name1 << '\n';
}
S inherentnim svojstvima para Ime/Vrijednost, skupa sa strukturiranom i uređenom naravi, naziv 'n-torka' se prirodno proširuje za porabu u modeliranju informacija i definiciji baza podataka.
Primjerice, XML n-torke predstavljaju strukture n-torki Ime/Vrijednost. Slijedi primjer XML n-torke:
<ime>Vrijednost</ime>
U nekim jezicima, napose u teoriji baza podataka, n-torka je definirana kao konačna funkcija koja preslikava imena polja u određene vrijednosti. Svrha joj je ista kao u matematici, da indicira da se određeni entitet ili objekt sastoji od određenih dijelova i/ili ima određena svojstva, s tim da su ovdje ti dijelovi identificirani jedinstvenim imenom polja a ne pozicijom, što često vodi ka prijemčivijoj notaciji. Općenit naziv za ovakav konstrukt jest asocijativni niz - drugi programski jezici imaju druga imena za ovaj koncept.
Mali primjer n-torke bi bio:
- ( igrač : "Ivan", bodovi : 25 )
što predstavlja funkciju koja preslikava ime polja "igrač" u string "Ivan" i ime polja "bodovi" u broj 25. Valja uočiti da je redoslijed dijelova n-torke nebitan, te da stoga može biti napisana kao:
- ( bodovi : 25, igrač : "Ivan" )
U relacijskom su modelu takve n-torke obično korištene za predstavljanje jednog iskaza - u ovom slučaju postoji jedan igrač imena "Ivan" i bodova "25".
U programskim su jezicima n-torke korištene za oblikovanje podatkovnih struktura. Primjerice, sljedeće bi mogla biti struktura koja predstavlja čvor u dvostruko vezanoj listi:
- ( vrijednost : 16, prethodni-čvor : 1174782, sljedeći-čvor : 1174791 )