Flerdimensjonal vektor
I programmering er en flerdimensjonal vektor en vektor som er indeksert av en ordnet liste over heltall. Antallet heltall som brukes i denne listen for å indeksere den flerdimensjonale vektoren er alltid det samme og er kjent som dimensjonaliteten til vektoren . På den annen side bestemmer grensene for hvert av heltallene som er en del av indeksen dimensjonen til vektoren . En vektor med dimensjonalitet k kalles ofte k -dimensjonal. De 1-dimensjonale vektorene tilsvarer vektorenevanlig der elementene er ordnet i en enkelt rad (eller kolonne); 2-dimensjonale vektorer er en annen måte å kalle de klassiske matrisene der elementene deres er ordnet i flere rader og kolonner (to dimensjoner). I praksis overstiger sjelden dimensjonaliteten til en vektor tre.
Representasjon i minnet
Måten å ordne elementene i en 1-dimensjonal vektor i minnet til en datamaskin er triviell, siden denne i seg selv har form av en (veldig stor) 1-dimensjonal vektor. Når du vil lagre n -dimensjonale vektorer , er problemet imidlertid ikke lenger åpenbart. Anta at vi ønsker å representere denne enkle todimensjonale matrisen:
Den vanligste måten å indeksere denne matrisen (eller 2-dimensjonal vektor) på er å bruke RC ( Row - Column , row -column ) -konvensjonen , der elementene refereres til ved først å indikere raden og deretter kolonnen (eksempel, ), på denne måten har vi:
Indeksering av flerdimensjonale vektorer kan gjøres på en av disse måtene:
- overordnet rad-rekkefølge : Elementene i hver rad lagres i rekkefølge, først én rad, så en annen, og så videre. Denne metoden brukes mest for statiske arrays deklarert i C .
| 1 | to | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- Kolonne-hovedrekkefølge : Analogt med den forrige, men denne gangen lagrer elementene etter kolonner i stedet for etter rader:
| 1 | 4 | 7 | to | 5 | 8 | 3 | 6 | 9 |
- X-dimensjonal vektor : Vanligvis er flerdimensjonale vektorer representert ved å bruke en 1-dimensjonal vektor som inneholder referanser (eller pekere) til andre 1-dimensjonale vektorer. Disse undervektorene kan være, utydelig, radene eller kolonnene i matrisen, alt avhenger av kriteriet eller tolkningen du vil ta.
De to første formene er mer kompakte og har potensielt bedre lokalisering av referanse, men de er også mer begrensede; vektorer må være rektangulære , i den forstand at ingen rad kan inneholde flere elementer enn en annen. Vektorer av vektorer, derimot, tillater dannelsen av ulik vektorer , også kalt taggete vektorer , der det gyldige området til en indeks avhenger av verdien til en annen, eller med andre ord, at de forskjellige radene (eller kolonnene) de kan være av forskjellige størrelser. Vektorer av vektorer er også nyttige i programmeringsspråk som bare tillater 1-dimensjonale vektorer som primitiver.
I mange applikasjoner, for eksempel numeriske applikasjoner som fungerer med matriser , må du iterere over 2-dimensjonale rektangulære vektorer på en forutsigbar måte. For eksempel, å beregne et element av matriseproduktet A x B innebærer å iterere over en rad med A og en kolonne med B samtidig. Ved å indeksere elementene i matrisen slik den er lagret i minnet, må du optimalisere plasseringsoperasjonene til hvert element så mye som mulig. Noen ganger kan en kompilator automatisk bestemme utformingen av den sekvensielle matrisen av elementer i en vektor slik at de også lagres sekvensielt i minnet, i vårt eksempel kan den velge rad-overordnet rekkefølge for A og kolonne-overordnet rekkefølge for B. _ Det er flere måter å lagre elementene i en matrise i minnet, noe som vil være mer effektivt for andre typer problemer, for eksempel hvis du ønsker å iterere over hoveddiagonalen til en matrise.