Vektor (databehandling)

I programmering kalles et sammenhengende lagringsområde som inneholder en serie elementer av samme type, elementene i matrisen matrise,formasjon,vektor, [ 2 ]​ Fra et logisk synspunkt kan en matrise sees på som et sett med elementer arrangert i en rad (eller rader og kolonner hvis den hadde to dimensjoner).

I prinsippet kan alle arrays anses å være av én dimensjon, hoveddimensjonen, men elementene i den raden kan i seg selv være arrays (en prosess som kan være rekursiv ), noe som lar oss snakke om eksistensen av arrays flerdimensjonale, selv om de enkleste å forestille seg er de med én, to og tre dimensjoner.

Disse datastrukturene er egnet for situasjoner der datatilgang er tilfeldig og uforutsigbar. På den annen side, hvis elementene kan bestilles og sekvensiell tilgang skal brukes, ville det være mer hensiktsmessig å bruke en liste , siden denne strukturen lett kan endre størrelse under kjøringen av et program, sistnevnte er en dynamisk struktur (da den ikke har en definert størrelse).

Indekser

Hver vektor består av et visst antall elementer, noe som gjør den til en statisk struktur. Hvert element er referert av posisjonen det opptar i vektoren. Disse posisjonene kalles indeks og er alltid korrelative. Det er tre måter å indeksere elementene i en matrise på:

Notasjon

Representasjonen av et element i en vektor gjøres vanligvis ved hjelp av vektoridentifikatoren etterfulgt av indeksen mellom firkantede parenteser, parenteser eller parenteser:

Notasjon eksempler
vektor[ indeks_1 , indeks_2 ..., indeks_N ] Lua , Perl , etc
vektor[ indeks_0 ][ indeks_1 ]...[ indeks_N-1 ] C , C++ , PHP , Java , etc
vektor( indeks_1 , indeks_2 ..., indeks_N ) Grunnleggende , MATLAB

Selv om de mange ganger er i pseudokode og i matematikkbøker, er de representert som bokstaver ledsaget av et numerisk underskrift som indikerer posisjonen du vil ha tilgang til. For eksempel for en vektor " A ":

(endimensjonal vektor)

Form for tilgang

Måten å få tilgang til elementene i matrisen på er direkte ; dette betyr at det ønskede elementet er hentet fra dets indeks, og du trenger ikke å lete etter det element for element (i tilfelle en liste, for å nå for eksempel det tredje elementet, må du få tilgang til forrige to eller lagre en peker eller peker som gir rask tilgang til det elementet).

For å jobbe med vektorer mange ganger er det nødvendig å krysse dem. Dette gjøres ved hjelp av løkker . Følgende kilde skrevet på C-språket viser en typisk algoritme for å krysse en vektor ' ' og bruke en funksjon ' ' på hver av vektorens komponenter:

int i = 0 ; int lengde = 99 ; // lengde på vektoren Eks. 99 int V [ lengde ]; while ( i < lengde ) //Eks. med While { //Noen operasjon utføres på vektoren i den i-te posisjonen f ( V [ i ] ); //Øk indeksen for neste trinn i = i + 1 ; // Kan også skrives som i++; eller i+= 1; }

Dynamiske og statiske vektorer

Vanligvis har en vektor en fast mengde minne allokert til seg, selv om avhengig av typen vektor og programmeringsspråk, kan en vektor ha en variabel mengde data. I dette tilfellet kalles de dynamiske vektorer , i motsetning til vektorer med en fast mengde minne som er allokert til dem, kalles statiske vektorer . [ 3 ]

Bruk av dynamiske vektorer krever riktig dynamisk minnebehandling . Feil bruk av dynamiske vektorer, eller bedre sagt, dårlig håndtering av dynamisk minne, kan føre til en minnelekkasje . Ved bruk av dynamiske vektorer vil det alltid være nødvendig å frigjøre minnet som brukes når det ikke lenger skal brukes.

Mer moderne språk og språk på høyere nivå har en mekanisme som kalles en søppeloppsamler (som tilfellet er med Java ) som lar programmet bestemme om det skal frigjøre plass basert på om det skal brukes i fremtiden .objekt.

Eksempler i C

  • Deklarasjon i C / C++ av en statisk vektor.
int main ( ugyldig ) { int i , v [ 5 ]; // v[5] er en 5-komponent vektor (nullbasert indeksering) for ( i = 0 ; i < 5 ; i ++ ) { v [ i ] = 0 ; // Vi tildeler en verdi printf ( "%d \n " , v [ i ]); printf ( " \n " ); // Opprett en ny linje } returner 0 ; }
  • C / C++ erklæring av en statisk matrise ved bruk av pekeraritmetikk.

Som identifikator for vektoren, en konstant peker som inneholder adressen til begynnelsen av vektoren (vektor[0], første element)

int main ( ugyldig ) { int i , v [ 5 ]; // v[5] er en 5-komponent vektor (nullbasert indeksering) for ( i = 0 ; i < 5 ; i ++ ) { * ( v + i ) = 0 ; // Tilordne en verdi på adressen (vektor + ((indeks * størrelsen på (int) antall byte offset fra base.) printf ( "%d \n " , * ( v + i )); printf ( " \n " ); // Opprett en ny linje } returner 0 ; }
  • Deklarasjon i C++ av en STL-vektor:
#inkluder <vektor> vektor < int > v ; // Hvis ikke spesifisert, er startstørrelsen 0 for ( int i = 0 ; i < 5 ; i ++ ) { v . push_back ( 2 * i ); // sett inn et element på slutten av matrisen }

Eksempelet ovenfor er laget for C++-språket. I C, for å lage dynamiske matriser, må du bruke malloc- og realloc- instruksjonene for å reservere minne dynamisk (se bibliotek stdlib.h ), og gratisfunksjonen for å frigjøre minnet som brukes.

Resultat:

0 1 to 3 4
0 to 4 6 8

Resultatet av begge eksemplene er samme vektor.

Flerdimensjonale vektorer

I Basic , Java og andre språk er det mulig å erklære flerdimensjonale arrays, forstå dem som en vektor med x-dimensjon. I disse tilfellene er antallet elementer i vektoren det resulterende produktet av hver dimensjon.

For eksempel har vektoren v(4,1) 10 elementer og beregnes som følger: (0-4) * (0-1). Elementene i den første dimensjonen av vektoren inneholder 5 elementer som strekker seg fra '0' til '4' og den andre dimensjonen har 2 elementer som spenner fra '0' til '1'. Elementene vil få tilgang til som følger:

element 1: (0,0) element 2: (0,1) element 3: (1.0) ... element 8: (3.1) element 9: (4.0) element 10: (4.1)

Se også

Referanser

  1. Antonio Vaquero, pioneren som oversatte databehandling: "Jeg bryr meg ikke om de sier 'datamaskin', men ikke om de sier datamaskin" , eldiario.es , 27. november 2015.
  2. Douglas Bell, Java for Students (2003). Mike Parr (3 utgave). Pearson utdanning. s. 162. ISBN 0-13-032377-2 .
  3. ^ Eck, David J. (2010). Introduksjon til programmering med Java . s. 340.