15. februar 2003 - 09:07Der er
4 kommentarer og 2 løsninger
En pænere måde at løbe en array igennem på
Jeg skal prøve at gøre det så præcist som muligt:
1) Jeg har en array som består af 1 til 31 elementer, denne array består kun af int 2) Jeg har array 2 som også består af 1 til 31 elementer, denne array består af klasser. Hver klasse har en variabel af typen int
Jeg skal have gennemløbet de 2 array's på en sådan måde at array 1 (int) blive sammenlignet med objekt 1-31 i array 2, det skal være den variabel der er af typen int. Hvis de 2 er ens skal der udføres noget kode
Jeg har selv følgende løsning:
for (int i = 0; i < array1.size(); i++) { for (int y = 0; y < array2.size(); y++) { if (array1 == array2) { //Do your stuff } } }
Sådan som jeg ser det er det muligt, men jeg har brug for at løbe 4 x 2 array igennem og på den måde vil være gennemløb vare max 31 * 31 = 961 gange og når jeg så skal gøre det 4 gange vil det give 4 * 961 = 3844 gange!!! Det er sgu ikke godt nok! Det må absolut kunne lade sig gøre på en anden måde.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hvis alle 31 skal sammenlignes med alle 31 så skal du nødvendigvis lave 31*31 sammenligninger.
Hvis du ved et eller andet om fordelingen, så kan der muligvis spares lidt ved noget ekstra kode. Men så skal vi vide lidt om denfordeling.
(fordeling dækker bl.a. over sortering som Erik er inde på)
31 * 31 sammenigninger bør ikke være et problem på en moderne computer. Så medmindre de 31 * 31 sammenligninger skal laves miliioner af gange ville jeg slet ikke bekymre mig.
M.h.t. om de 31 * 31 sammenligninger skal laves dom fu viser i en løkke, så er det den naturlige måde at gøre det.
Man kunne muligvis vinde en lille bitte smule ved at lave loop unrolling.
Eller, Arne, hvis én af tabellerne ikke ændrer sig fra gang til gang, kan man proppe den ind i en hash-tabel, indexeret af den tal-værdi man skal finde.
Hvis begge er sorterede er en fletning en oplagt mulighed.
Min gamle PC, kan ikke engang måle hvor lang det tager at gennemløbe de 2 arrays 3844 gange, så her er en lille test på hvor lang tid det gennemløbe 100.000.000 gange, min maskine siger 1633 millisekunder!!
Carsten
public class Test {
public static void main(String[] args) { int[] ar1 = new int[10000]; int[] ar2 = new int[10000];
for( int i = 0; i < 10000; i++) { ar1[i] = i; ar2[i] = i; }
long g1 = System.currentTimeMillis();
int genn = 0; for( int i = 0; i < ar1.length; i++) { for( int x = 0; x < ar2.length; x++) { if(ar1[i] == ar2[x]) { // doSomething genn += 1; } else genn += 1; } } long g2 = System.currentTimeMillis();
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.