Veld (gegevenstype)

Van Wikipedia, de gratis encyclopedie
Spring naar navigatie Spring naar zoeken

Een veld ( Engels veld, array [ əˈɹeɪ ] (nadruk op 2e lettergreep) voor 'arrangement', 'arrangement', etc.) is een datastructuurvariant in de informatica , met het gebruik waarvan "veel soortgelijk gestructureerde gegevens [...] moeten worden verwerkt ". [1] De toegang tot bepaalde inhoud van een veld vindt plaats met behulp van indices die de positie ervan aangeven.

voorwaarden

synoniemen

In de taal en voornamelijk beïnvloed door het gebruik van verschillende programmeertalen van hun terminologie en geschiedenis en vertaling uit het Engels, is het hier - '- Concept veld beschreven' toegewezen aan verschillende termen om array te betekenen: Array, Table, Vector, Row, sequence, gegevensveld, opstelling, gebied, poortarray, matrix , enz. "De Engelse en meer gebruikelijke term voor veld [in deze betekenis] is array". [2]

De afzonderlijke elementen van een array worden ook met verschillende uitdrukkingen aangeduid: element, component, subveld, veldelement, geïndexeerde variabele - soms ook "veld" of " gegevensveld ".

Afhankelijk van de context heeft de verwijzing naar 'field' als alternatief betrekking op het declaratieniveau van de array of opgeslagen inhoud .

Andere betekenis

De term 'veld' wordt ook algemeen opgevat als een elementaire, gegevensbeschrijvende constructie die in de broncode van een computerprogramma wordt gebruikt om opslagruimte te definiëren. In die zin is een veld geen gegevenstype, maar heeft het een gegevenstype , en het maakt niet uit of het een array is of een gegevensstructuur op een hoger niveau, b.v. B. Verbund of Record, beluisterd of niet. 'Veld' in deze zin wordt in wezen gelijkgesteld met variabel of gegevensveld . Literatuurvoorbeelden:

  • Uitdrukkingen als statisch veld, klassenveld, veldlengte etc. verwijzen in algemene zin naar 'veld'.
  • 'Veld' wordt gebruikt (bijvoorbeeld in [3] ) als een typeneutrale dataconstructie.
  • Hetzelfde geldt voor teksten als "... inhoud van het orderidentificatieveld" (in de link naar siko.de) en "... behandelt elk array-element als een apart veld" in [4] of uitdrukkingen zoals " velden voor gegevensuitwisseling", "... draagt ​​gegevens over naar een veld ”,“ inhoud van het gegevensveld ”,“ veldbeschrijving ”,“ veldlengte ”, bijvoorbeeld in een softwarehandleiding.
  • Zelfs in documenten die in feite 'field' in de zin van 'array' gebruiken, wordt de uitdrukking 'field' ook niet-array-gerelateerd gebruikt: "Hier heeft de array 10 velden" of "alle andere velden hebben een ongedefinieerde waarde" in [5 ]

De twee wezenlijk verschillende betekenissen van 'veld' zijn en zijn altijd de aanleiding geweest voor soms verhitte discussies. [6]

Indexen

Een 'index' wordt gebruikt om een ​​individueel element in een veld te adresseren. In het geval van multidimensionale velden is er een index voor elke dimensie.

In programmeertalen op hoog niveau wordt de index gespecificeerd als een geheel getal voor ' standaardvelden '. ' Associatieve velden ' daarentegen laten het gebruik van alle, niet noodzakelijk numerieke, maar unieke sleutelwaarden als indices toe.

Taalspecifieke verschillen

In principe kunnen arrays in de meeste programmeertalen worden gemaakt en verwerkt. Naast de verschillende termen die zich in afzonderlijke talen hebben ontwikkeld, worden arrays op verschillende manieren geïmplementeerd en ondersteund door de compilers van de programmeertalen, soms ook in verschillende taalversies. Voorbeelden:

  • Onderscheid tussen standaardveld / associatieve array / alleen lijsten door de compiler van de programmeertaal
  • Aantal mogelijke dimensies (intrinsiek multidimensionale arrays, array-in-array)
  • Maximale matrixgrootte
  • De elementen adresseren (vanaf 0, van 1 of van een willekeurige index, eventueel ook beginnend met een negatieve index)
  • Mogelijke dataformaten en lengtes in de array
  • Aantal subvelden: vast, dynamisch / variabel per dimensie
  • Formaat van de subvelden: uniform voor alle indexwaarden, verschillend
  • Ondersteuning voor bewerkingen op datasets in de array: alleen op elementen, elke structuur, hele dimensie, hele array
  • Adresseringsmethode:
    • De index is een geheel getal
    • De index bevat de relatieve afstand tot het begin van de array
    • De index is een zoeksleutel
Bijbehorende berekeningen kunnen handmatig worden geprogrammeerd of worden gedeeltelijk of volledig automatisch door de compiler uitgevoerd .

In de meeste assembleertalen is de verwerking van arrays mogelijk, maar syntactisch wordt dit meestal niet speciaal ondersteund en moet het expliciet door de programmeur worden "opnieuw gemaakt": de programmeur implementeert array-elementen en andere variabelen en reserveert ook de geheugenruimte voor n verdere versies. Voor verwerking bepaalt het de positie van relevante elementen met behulp van geschikte algoritmen , bijvoorbeeld in een indexregister , en adresseert ze met geschikte instructies die niet specifiek zijn ontworpen voor arrayverwerking.

Bij het declareren worden arrays geformuleerd in een taalspecifieke syntaxis . Voorbeelden:

  • FeldX (100) (gegevensnaam plus aantal array-elementen tussen ronde haakjes): PL / I
  • FeldX [100,...] (gegevensnaam plus het aantal array-elementen voor elke dimensie tussen vierkante haken): C # [7]
  • FeldX [100][][] (gegevensnaam plus het aantal array-elementen voor elke dimensie tussen vierkante haken): C / C ++ , [8] Java [9]
  • FeldX array (100) (trefwoord 'array' plus aantal elementen tussen ronde haakjes): Modula-2
  • FeldX occurs 100. (Trefwoord 'OCCURS' plus aantal elementen): Cobol
  • Dim FeldX (100,...) (trefwoord 'Dim' plus variabelenaam plus aantal elementen per dimensie (tussen ronde haakjes)): VBA , 'Dimension' voor Fortran90 / 95

Gegevenstype element

In programmeertalen voor statische typen is de veldinhoud meestal beperkt tot elementen van een enkel gegevenstype. Af en toe is echter een speciaal geval van "grotendeels elke inhoud" mogelijk, met objectgeoriënteerde programmeertalen vaak via polymorfisme van de algemene basisklasse . In programmeertalen voor dynamisch typen kunnen objecten of algemene gegevensstructuren meestal in bijna elke samenstelling en volgorde worden opgeslagen. In programmeertalen voor dynamisch typen worden echter vaak alleen associatieve arrays aangeboden.

Veldvarianten

Standaard veld

Standaardveld vs Associatief veld vs 'Veld' als 'Gegevensveld'

Met behulp van een veld kunnen de gegevens van een doorgaans uniform gegevenstype zodanig in het geheugen van een computer worden opgeslagen dat de gegevens via indices toegankelijk zijn. In tegenstelling tot het associatieve veld is het standaardveld ingesteld op gehele indices voor adressering. Een index begint met een (eendimensionaal) veld met N elementen, standaard, afhankelijk van de programmeertaal, met 0 ( C ++ : 0,1,2, ..., N-1) of 1 ( Fortran : 1,2,3, ..., N), maar vaak vrij te kiezen (42, 43, 44, ..., N + 41).

Dynamisch veld

Een dynamische array of lijst met arrays is een gegevensstructuur met willekeurige toegang van variabele grootte waarin items kunnen worden toegevoegd of verwijderd. Het wordt geleverd door standaardbibliotheken in veel moderne programmeertalen .

Een dynamische array is niet hetzelfde als een dynamisch toegewezen array, wat een array is waarvan de grootte wordt aangepast wanneer de array wordt toegewezen, hoewel een dynamische array een dergelijke array met een vaste grootte als back-end kan gebruiken.

Een eenvoudige dynamische array kan worden gemaakt door een array met een vaste grootte toe te wijzen die meestal groter is dan het aantal elementen dat onmiddellijk nodig is. De elementen van de dynamische array worden aan het begin van de onderliggende array aaneengesloten opgeslagen en de resterende posities aan het einde van de onderliggende array worden gereserveerd of niet gebruikt. Elementen kunnen worden toegevoegd aan het einde van een dynamische array in constante runtime met behulp van de gereserveerde ruimte totdat deze ruimte volledig is bezet.

Als alle ruimte is verbruikt en er een extra element moet worden toegevoegd, moet de onderliggende array met vaste grootte worden vergroot. Het is meestal duur om de grootte te wijzigen omdat er een nieuwe onderliggende array moet worden toegewezen en elk element moet worden gekopieerd uit de originele array. Elementen kunnen in constante tijd van het einde van een dynamische array worden verwijderd, omdat het formaat niet hoeft te worden gewijzigd. Het aantal elementen dat door de inhoud van de dynamische array wordt gebruikt, is de logische grootte , terwijl de grootte van de onderliggende array de capaciteit of fysieke grootte van de dynamische array wordt genoemd. Dit is de maximaal mogelijke grootte die kan worden gebruikt zonder gegevens te verplaatsen.

Een dynamische array is nodig wanneer de maximale logische grootte niet is ingesteld of niet kan worden berekend voordat de ruimte is gereserveerd voor de array.

associatief veld

De "associatieve array" is een speciale vorm. Het gebruikt niet per se integer numerieke indexen, maar sleutels om de elementen aan te pakken. In principe kunnen deze sleutels van elk type zijn, bijvoorbeeld tekenreeksen , maar ze moeten een element uniek identificeren . Voorbeeld: Het productnummer is de index die wordt gebruikt om gegevens over een specifiek product in een producttabel te indexeren, b.v. Produkt = ProdBezeichn (ProdNr) .: Produkt = ProdBezeichn (ProdNr) . Meestal worden associatieve velden geïmplementeerd als hash-tabellen .

In het geval van associatieve arrays - als extra onderdeel van de adresberekening (zie hieronder) - moet de positie van de gegevens worden bepaald met behulp van het gegevensveld dat als sleutel is opgegeven. Dergelijke velden worden alleen "associatief" genoemd als dit deel van de adressering automatisch wordt berekend door de programmeertaal.

Dimensies

In de meeste programmeertalen kan een veld - en dus de gegevens die erin zijn opgeslagen - niet alleen eendimensionaal zijn, maar ook multidimensionaal. In het geval van multidimensionale velden wordt een aparte index gebruikt voor het adresseren van hun elementen voor elke dimensie. Er kan een onderscheid worden gemaakt tussen de volgende varianten van het begrip dimensie. In de voorbeelden wordt een symbolische voorbeeldcode gebruikt, de startindex is 1.

Eendimensionale velden

Net als in een lijst worden de veldelementen beheerd als een elementair gegevensveld of als een samenstelling met meerdere elementaire velden. De informatie is toegankelijk via 'ArrayName (index)'.

Voorbeelden

1. eendimensionaal (zoals een 'lijst')

 Vector: = array (3) van float // Declaratie van een 1-dimensionale lijst genaamd "Vector" met 3 'vrije ruimtes'
 Vector: = (0,5, 1,7, -0,2) // het punt (x = 0,5; y = 1,7; z = -0,2) in de ℝ³
Vektor[2] levert de y-component met de waarde 1.7 .

2. eendimensionaal (met samengesteld gegevenstype):

 Product: = array (100) van structuur {
    ProdNr: = Tekst [6] // Tekst met maximaal 6 karakters
    Aankoopprijs: = FixPunktZahl [4; 2] // puntnummer met 4 plaatsen voor, 2 plaatsen achter de komma
    Verkoopprijs: = FixPunktZahl [4; 2] // idem
    Inventaris: = Integer [6] // geheel getal met 6 cijfers
 } // eindstructuur
Produkt(Index).ProdNr, Produkt(Index).Einkaufspreis geven de vermelde waarden voor het product waarnaar de index Produkt(Index).ProdNr, Produkt(Index).Einkaufspreis .

Multidimensionaal / in-jezelf multidimensionaal

Met deze variant kan informatie zoals elementen van een tweedimensionaal oppervlak of een driedimensionale kubus worden gepresenteerd. "Alleen de laatste dimensie bevat de elementen", [10] elk stuk informatie is daarom alle dimensies , b.v. B. Breedte, hoogte, diepte, evenzeer toerekenbaar. Toegang vindt plaats door opgave van alle indexen ('<AttrName> (i1, i2, ...)'). ISO_IEC 11404 noemt deze velden "inherent multidimensionaal" onder de 'General Purpose Datatypes'. Deze multidimensionale velden worden ook wel tensoren genoemd , vooral op het gebied van deep learning , naar hun wiskundige equivalent. [11]

Voorbeelden

1. tweedimensionaal (zoals een matrix of een tabel):

In een matrix worden de horizontale invoeren ( velden , cellen ) rijen genoemd , de verticale kolommen . Een individueel element wordt duidelijk geïdentificeerd ( geadresseerd ) door de rij en kolom een ​​naam te geven. Adressering via een tuple (0,0) of A1 voor kolom A, rij 1 is gebruikelijk.
 Dambord: = array (8,8) van String
array declareert het Schachfeld als een array ("field") met 8 bij 8 items, of declareert het type van het item, hier een String .
 Schaakveld: = (("w_Turm", "w_Springer", "w_Läufer", "w_König", ..., "w_Turm"),
                ("w_Bauer", "w_Bauer", "w_Bauer", "w_Bauer", ..., "w_Bauer"),
                ("", "", "", "", ..., ""),
                ("", "", "", "", ..., ""),
                ("", "", "", "", ..., ""),
                ("", "", "", "", ..., ""),
                ("s_Bauer", "s_Bauer", "s_Bauer", "s_Bauer", ..., "s_Bauer"),
                ("s_Turm", "s_Springer", "s_Läufer", "s_König", ..., "s_Turm"))
De bovenstaande toewijzing definieert de startvolgorde van de figuren, w_ = wit, s_ = zwart. I.E. bovenaan zit de speler met de witte stukken en onderaan de speler met de zwarte stukken.
In het voorbeeld loopt de kolomindex van links naar rechts, de rijindex van boven naar beneden. In het volgende is de rij-index de eerste en de kolomindex de tweede, de indexering is Schachfeld[Zeilenindex,Spaltenindex] . De kolomindex "loopt sneller".
Bij schaken worden de kolommen aangeduid als lijnen en geadresseerd met de kleine letters "a" - "h", de rijen als rijen , geadresseerd met "1" - "8". Het Schachfeld[z,s] komt dus overeen met het veld (“a” - “h”) [9- s ] z .
De voorbeelduitspraken Schachfeld[5,4] *1 := Schachfeld[5,2] *2 en Schachfeld[5,2] *1 := "" geven de openingszet " d2–d4 ".
* 1: of [ToLine, ToColumn] * 2: of [FromLine, FromColumn]

2. multidimensionaal (hier met 4 dimensies):

Voor een verbrandingskamer (x; y; z) (bijvoorbeeld van een motor),
waarbij x, y en z worden gegeven in millimeters van 1 tot 50,
op elk punt en gedurende een periode van één seconde voor elke milliseconde wordt een temperatuurspecificatie opgeslagen:
 temperatuur: = array (50,50,50,1000) van float
→ 4-dimensionale array (x, y, z, tijd)
Hoe warm was het op het punt (x = 7; y = 12; z = 48) op tijdstip t = 617 ms?
 = temperatuur (7, 12, 48, 617)

Multidimensionaal / veld bevat een ander veld

Hier bevat een veld als element - naast veelal andere datavelden - weer een veld etc. met eventueel verdere niveaus. Deze variant wordt ook wel een branched array genoemd . [12] [13] Informatie die in het veld is opgeslagen, behoort tot precies één dimensie, dwz tot precies één van de indexwaarden. Dienovereenkomstig wordt informatie in het buitenste veld benaderd, bijvoorbeeld met '<Attr_in_Dim1> (i)' en informatie in het binnenste veld met '<Attr_in_Dim2> (i, j)' enz. "Multidimensionaal" verwijst hier naar de het geheel van alle im Informatie die hiërarchisch is opgeslagen (= boomachtig = 'vertakt'), niet op elk afzonderlijk element. Het aantal dimensies is het resultaat van de "nesting diepte" van de binnenste array. ISO_IEC 11404 noemt deze velden "geïnduceerd multidimensionaal".

Voorbeeld 'velden voor een magazijnstelling'
 Opbergplank: = array (10) // Er zijn 10 opbergplanken = veld van de 1e dimensie
   LB_Bezei: = Tekst (20) // hoe de respectievelijke opslagvloer wordt genoemd / gelabeld
   ... // indien nodig aanvullende gegevens per magazijnvloer, bijv. B. max. Totaal gewicht
   WZ_Box: = array (5) // max. 5 gereedschapskisten per legbord, 2e dimensie
     WZ_Bezei: = Tekst (20) // Aanduiding van de gereedschappen die in de doos zijn of moeten worden opgeborgen
     WZ_Anz: = numeriek (4) // het aantal gereedschappen dat erin is opgeslagen
     ... // indien nodig aanvullende gegevens per gereedschapskist, eventueel extra array 3e afm.
'LB_Bezei (I1), "Box-Nr:" & I2, WZ_Bezei [I1,I2], WZ_Anz [I1,I2] ...' levert de gereedschapsaanduiding en het nummer ervan 'LB_Bezei (I1), "Box-Nr:" & I2, WZ_Bezei [I1,I2], WZ_Anz [I1,I2] ...' in een bepaalde doos (opbergvak en doos nr.) worden bewaard.
'LB_Bezei (I1)' levert de aanduiding van de 'LB_Bezei (I1)' .
'WZ_Bezei (I1,I2) = "Rohrzangen", WZ_Anz (I1, I2) = 10' maakt een nieuwe gereedschapskist met 10 pijptangen.
'WZ_Anz (I1,I2) -1 werkt het nummer bij wanneer een gereedschap uit de doos wordt 'WZ_Anz (I1,I2) -1 .

Indices zijn alleen te specificeren in de instructies voor de dimensie(s) waaruit informatie wordt geadresseerd / opgehaald, b.v. B. LB_Bezei (x) of WZ_Bezei (x, y).

Een veld adresseren

Ondanks de veelal driedimensionale inhoud van velden, vooral in het geval van multidimensionale, worden de in een veld opgeslagen elementen ook opgeslagen in een lineair geheugen. De elementen van een eendimensionale vector worden na elkaar in het geheugen opgeslagen, bij een tweedimensionale matrix worden de elementen ofwel als rij- of kolomvectoren achter elkaar opgeslagen, met een driedimensionaal veld een overeenkomstig aantal matrices worden achter elkaar opgeslagen, enz.

In de meeste programmeertalen wordt het adresseren van velden volledig afgehandeld door de compiler . In assembler moet het expliciet in de broncode worden geprogrammeerd.

Geheugentoewijzingsfunctie

twee varianten van de opstelling van een tweedimensionaal veld in het hoofdgeheugen

Een programma dat toegang wil tot elementen van een veld, moet hun geheugenadres berekenen.

voorbeeld

Gegeven: Een 2-dimensionaal veld met 4 lijnen (1..4) en 7 kolommen (1..7). Elk element is 4 bytes groot. Het element moet worden benaderd (rij = 3, kolom = 6). Het veld begint op geheugenadres basis.

Aangezien een element van regel 3 wordt benaderd, moeten 2 regels worden "overgeslagen":

2 (regels overslaan) * 7 (elementen per regel) * 4 (bytes per element) = 56 (= begin van de 3e regel in het veld)

In regel 3 moet kolom 6 worden geopend, dus 5 extra elementen moeten worden "overgeslagen":

5 (kolommen overslaan) * 4 (bytes per element) = 20 (= begin van 6e kolom in rij 3)

Het gewenste element begint dus bij adres ( base + 56 + 20) = ( base + 76) en is 4 bytes lang.

Over het algemeen

In een -dimensionaal veld wordt het adres van een element bijvoorbeeld met behulp van de formule berekend. Deze formule wordt ook wel de geheugentoewijzingsfunctie genoemd .

De getoonde formule is slechts één van ten minste twee alternatieven, afhankelijk van de volgorde waarin de indices worden gecombineerd tot geheugenblokken, van de eerste naar de laatste of vice versa. In het Engels wordt onderscheid gemaakt tussen rij-hoofdvolgorde (rangschikking in rijen) en kolom-hoofdvolgorde (rangschikking in kolommen).

Het is meestal aan de runtime-omgeving van de betreffende compiler om deze berekeningen uit te voeren en in het betreffende commando te gebruiken, ongeacht de variant.

Dope vector

als de producten: constant zijn in de bovenstaande formule, kunnen ze één keer worden berekend. De resulterende dope-vector d maakt dan de formule . mogelijk een zeer snelle berekening van het adres van elk opgeslagen item.

Programma-efficiëntie

Het verwerken van gegevens binnen een veld vereist - in tegenstelling tot gegevensvelden die zonder index kunnen worden aangesproken - extra inspanning om het daadwerkelijke geheugenadres van de gebruikte gegevensvelden te berekenen. De programmeur kan de hiervoor benodigde rekencommando's, veelal gegenereerd door een compiler - deels beïnvloeden en optimaliseren - als dit nog niet door de compiler is gedaan. De volgende voorbeelden geven details, waarvan de toepassing kan leiden tot efficiëntere code , zie details en verdere voorbeelden. [14]

  • Wanneer literals als index worden gebruikt , berekent de compiler het geheugenadres tijdens het compileren . Sommige compilers bepalen of de index afhankelijk is van variabelen waarvan de status al bij het compileren kan worden bepaald.
  • Gebruik van interne dataformaten voor de indexvariabele zodat er geen formaatconversie nodig is in het kader van de adresseringsberekening.
  • Reeds berekende toegangsadressen hergebruiken in plaats van ze voor elke opdracht opnieuw te berekenen. Afhankelijk van de compiler kunnen geschikte adresseringsmethoden worden geselecteerd.In sommige gevallen bepalen compilers dit hergebruik en genereren automatisch geoptimaliseerde code.
  • Een geschikte keuze van de volgorde van de afmetingen: Als een veld in het RAM van een computer wordt bewaard, vindt de toegang tot veldelementen meestal het snelst plaats als opvolgende adressen worden opgeroepen ( localiteit maakt caching mogelijk ). De programmeur moet dus de volgorde van de indices in het veld zo bepalen dat dit ook in de binnenste lus gebeurt. Aangezien de geheugentoewijzingsfunctie afhangt van de compiler, moet de programmeur deze details te weten komen en vervolgens de index definiëren die wordt doorlopen in de binnenste lus van het programma, zodat deze overeenkomt met opeenvolgende elementen in Ram.
  • Outsourcing van 'veld' inhoud met (lokaal / tijd lokaal) meerdere / veel toegangen met dezelfde index in een apart, direct adresseerbaar geheugengebied.
  • Adresseer samengestelde structuur op een hoger niveau in plaats van veel elementaire gegevensvelden: bijvoorbeeld bij het verplaatsen van array-items, bijvoorbeeld bij het sorteren van array-inhoud, vindt de adresberekening meestal slechts één keer per verbinding plaats wanneer naar een verbinding wordt verwezen (samengestelde naam (index)) - anderzijds bij het verwijzen naar individuele elementen van het composiet per composietelement.

Het nut of de noodzaak van dergelijke efficiëntiemaatregelen, die om redenen van leesbaarheid van een programma altijd goed gedocumenteerd moeten zijn, hangt af van verschillende factoren: ze zijn niet relevant als de gebruikte compiler automatisch passende optimalisaties maakt, minder relevant, bijvoorbeeld als het programma wordt slechts zelden uitgevoerd als het slechts een korte runtime heeft in elk geval, als de veldgerelateerde commando's slechts een klein deel van de totale verwerking uitmaken.

Zie ook

web links

WikiWoordenboek: Array - uitleg van betekenissen, woordoorsprong, synoniemen, vertalingen
Commons : Array-gegevensstructuur - verzameling van afbeeldingen, video's en audiobestanden

Individueel bewijs

  1. Programmeren in Fortran , Universiteit van Bayreuth
  2. Een C-zelfstudie. C-how-to
  3. Microsoft msdn visuele studio
  4. Linguee
  5. rrzn Universiteit van Hannover (PDF; 411 kB)
  6. Voorbeeld van "verhitte discussie" op leo.org
  7. msdn.microsoft.com Microsoft
  8. www2.informatik.uni-halle.de ( Aandenken aan het origineel van 29 april 2015 in het internetarchief ) Info: De archieflink is automatisch ingevoegd en is nog niet gecontroleerd. Controleer de originele en archieflink volgens de instructies en verwijder deze melding. @ 1 @ 2 Sjabloon: Webachiv / IABot / www2.informatik.uni-halle.de Uni Halle
  9. homeandlearn.co.uk Java
  10. Programmersbase Tutorial / Java Basics / Arrays ( Memento van 23 februari 2015 in het internetarchief )
  11. ^ Jeff Dean, Rajat Monga, Sanjay Ghemawat: TensorFlow: grootschalige machine learning op heterogene systemen . In: TensorFlow.org . Google-onderzoek. 11 september 2015. Ontvangen op 10 november 2015.
  12. Rheinwerk-Verlag openbook.rheinwerk-verlag.de
  13. MSDN msdn.microsoft.com
  14. Codeprestaties maximaliseren... MathWorks, technische artikelen en nieuwsbrieven