Prijeđi na sadržaj

N-torka

Izvor: Wikipedija

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".

Imena n-torki

[uredi | uredi kôd]

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.

Formalne definicije

[uredi | uredi kôd]

Glavna svojstva koja razlikuju n-torku od, na primjer, skupa, su:

  1. n-torka može sadržavati objekt više nego jednom, i
  2. 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: iai.

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:

  1. 0-torka (tj. prazna n-torka) je predstavljena sa
  2. 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:

  1. istaknuti simbol NIL predstavlja praznu listu;
  2. 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.

Uporaba u računarstvu

[uredi | uredi kôd]

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

[uredi | uredi kôd]

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.

Programski jezik C++

[uredi | uredi kôd]

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';
}

Modeliranje informacija

[uredi | uredi kôd]

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>

Imena polja

[uredi | uredi kôd]

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 )

Vanjske poveznice

[uredi | uredi kôd]

Izvori

[uredi | uredi kôd]