Archief - [PROG][OO] algoritme random array

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

schop aars

Legacy Member
kent iemand een algoritme om bv 10 strings een random plaats te geven in een array van strings (die dan uiteraard ook 10 plaatsen heeft).
:help:

killgore

Legacy Member
simpel shufflen als volgt:

loop van i=1..10
bepaal een random getal in [i,10]
wissel array en array[randomgetal]
end loop.

edit: staat bekend als fisher-yates :p.

sebbonny

Legacy Member
kunt het ook makkelijker doen door een array aan te maken met tien Strings, deze om te zetten naar een list en op die list ne shuffle toe te passen:

Code:
import java.util.*;

public class arrayTest {
	
	   public static void main( String args[] )
	   {
		   String[] array = {"Str1","Str2","Str3","Str4","Str5","Str6","Str7","Str8","Str9","Str10"};
		   List<String> lijst = Arrays.asList(array);
	
		   Collections.shuffle( lijst );
		   String[] array2 = (String[]) lijst.toArray();
		   
		   for(String element: array2)
		   {
			   System.out.printf("%s ",element);
		   }
	   }
	
}

killgore

Legacy Member
wat is daar simpeler aan :x?

+ je geeft een java-only voorbeeld.
+ Hij vroeg een algoritme :p.

sebbonny

Legacy Member
killgore zei:
wat is daar simpeler aan :x?

+ je geeft een java-only voorbeeld.
+ Hij vroeg een algoritme :p.

ik vind da simpeler, met een methode haal je alles door elkaar? Hoe simpel kan het zijn?

=> wist ni da het ni voor java was :p
+ nu heeft hij keuze :p

[BAT] Hydra

Legacy Member
ff muggenziften, fisher-yates zou maar loopen voor i=1..9

killgore

Legacy Member
sebbonny zei:
ik vind da simpeler, met een methode haal je alles door elkaar? Hoe simpel kan het zijn?

=> wist ni da het ni voor java was :p
+ nu heeft hij keuze :p

Je moet eerst alles gaan kopiëren in een heel nieuwe data structuur en gaat daarna een algorithme aanhalen waarvan je de werking niet kent.

Het is langer in code, zal langer zijn in uitvoering & overhead. Het enige waar het eenvoudiger is is het 'begrijpen'. Maar als je ietwat deftig programmeur wilt worden vind ik dat het al erg is als je een eenvoudig shuffling algoritme als dit zelfs niet zou kunnen begrijpen.

[BAT] Hydra;9520326 zei:
ff muggenziften, fisher-yates zou maar loopen voor i=1..9

true :$

Krueger

Legacy Member
killgore zei:
Je moet eerst alles gaan kopiëren in een heel nieuwe data structuur en gaat daarna een algorithme aanhalen waarvan je de werking niet kent.

Het is langer in code, zal langer zijn in uitvoering & overhead. Het enige waar het eenvoudiger is is het 'begrijpen'. Maar als je ietwat deftig programmeur wilt worden vind ik dat het al erg is als je een eenvoudig shuffling algoritme als dit zelfs niet zou kunnen begrijpen.
Hiermee ben ik niet akkoord. Als er ergens API functies bestaan voor iets dat je wil doen, gebruik die dan, en begin niet zelf met algoritmes te ontwikkelen. Hoogstwaarschijnlijk zullen ze trager zijn, en zullen ze meer fouten bevatten.
Langer in code? De code die sebbonny geeft is 2 regels, en zou 1 regel zijn moest het bij het starten al in een List zitten.

killgore

Legacy Member
Krueger zei:
en zou 1 regel zijn moest het bij het starten al in een List zitten.

Andere situatie :).

edit: meer code was idd wel fout, my mistake.

Ivm API's ga ik niet akkoord als het op algoritmes aankomt. Deze kunnen je immense voordelen geven bij specifieke implementaties.

Krueger

Legacy Member
killgore zei:
Andere situatie :).

edit: meer code was idd wel fout, my mistake.

Ivm API's ga ik niet akkoord als het op algoritmes aankomt. Deze kunnen je immense voordelen geven bij specifieke implementaties.

Dus als je een list hebt, en je wil die sorteren, dan ga jij zelf een algoritme schrijven, dat debuggen, hopen dat je een goed en snel algoritme hebt gekozen, ...

Ik opteer dan toch voor de List.Sort() functie die in de meeste talen wel zal bestaan. Je weet dat ze goed zal werken, ze zal wel snel zijn, je moet ze niet debuggen,... De ontwikkelingstijd is stukken korter, je code leest vlotter, zal waarschijnlijk sneller zijn, ...

killgore

Legacy Member
Krueger zei:
Dus als je een list hebt, en je wil die sorteren, dan ga jij zelf een algoritme schrijven, dat debuggen, hopen dat je een goed en snel algoritme hebt gekozen, ...

Ik opteer dan toch voor de List.Sort() functie die in de meeste talen wel zal bestaan. Je weet dat ze goed zal werken, ze zal wel snel zijn, je moet ze niet debuggen,... De ontwikkelingstijd is stukken korter, je code leest vlotter, zal waarschijnlijk sneller zijn, ...

Voor de meeste toepassingen heb ik mijn eigen sorteeralgoritmes ja. Die meestal ook nog eens sneller zijn en zo :).

Maar neen, ik ga dit niet altijd doen. Als ik een beschikbare functie heb om te sorteren (al dan niet ooit al zelf gemaakt) en ik heb niet echt nood aan een specifieke implementatie ga ik die natuurlijk gebruiken.

Het probleem is echter, als je met dergelijke dingen wat deftig bezigbent heb je vaak wel nood aan een specifieker algoritme ipv af te gaan op een algemene functie.

sebbonny

Legacy Member
Als je bv een groot project uitwerkt, is het toch handiger datje "ready to use" methoden gebruikt, waardoor je geen tijd verliest, dan zelf een algoritme te gaan schrijven?

killgore

Legacy Member
sebbonny zei:
Als je bv een groot project uitwerkt, is het toch handiger datje "ready to use" methoden gebruikt, waardoor je geen tijd verliest, dan zelf een algoritme te gaan schrijven?

Zoals ik zei hangt het van situatie tot situatie af.

Maar dat is eigenlijk een eindeloze discussie want het hangt puur af van waar personen voornamelijk mee bezig zijn :).

Ik kan krueger daarom ook geen ongelijk geven hoor, in veel applicaties zal het eenvoudiger zijn om zelfs array->list convert te doen en dan te shufflen met bestaande algorithmes, in anderen is zo een extra overhead dan weer 'rampzalig'. Dus tja, ik heb wat overdreven gereageerd :).

Bavo aka Joske

Legacy Member
Killgore klinkt als iemand die licentiaat informatica doet, Krueger als iemand die reeds werkt. Ik als werkend mens geef vlotjes Krueger hier gelijk. Als het Javabetreft, en waarschijnlijk .NET dan zijn de meest courante zaken reeds in de API geïntegreerd, en indien niet, dan heeft ene of andere third party er een goede lib voor gemaakt.

Tenzij je bezig bent met rocket science of een grensverleggende 3D-engine, zullen bestaande oplossingen altijd de meest optimale zijn die je kan vinden. Want zij die het hebben gemaakt, hebben er ook over nagedacht, samen met zij die het eventueel hebben bijgestuurd.

Bestaande oplossingen lezen sneller (wat als iedereen Math.sqrt() zou implemeteren?) en krijg je sneller aan het werk.

killgore

Legacy Member
Bavo aka Joske zei:
Killgore klinkt als iemand die licentiaat informatica doet, Krueger als iemand die reeds werkt. Ik als werkend mens geef vlotjes Krueger hier gelijk. Als het Javabetreft, en waarschijnlijk .NET dan zijn de meest courante zaken reeds in de API geïntegreerd, en indien niet, dan heeft ene of andere third party er een goede lib voor gemaakt.

Tenzij je bezig bent met rocket science of een grensverleggende 3D-engine, zullen bestaande oplossingen altijd de meest optimale zijn die je kan vinden. Want zij die het hebben gemaakt, hebben er ook over nagedacht, samen met zij die het eventueel hebben bijgestuurd.

Bestaande oplossingen lezen sneller (wat als iedereen Math.sqrt() zou implemeteren?) en krijg je sneller aan het werk.

Ik doe Computerwetenschappen, wat eigenlijk niet eens ter zake doet want wij zien bitter weinig algoritmen, nadruk van men opleiding ligt dan ook allesbehalve op het programmeren.

Zoals ik zei heb ik overdreven gereageerd en baseerde ik me teveel op zaken waarmee ik bezig ben, wat inderdaad nogal low-lev is :).

En jouw visie op informatica is ook maar nauwtjes. Er zijn heus wel meer zaken in de wereld als .net en java toepassingen :ironic:. In zéér veel toepassingen heb je niet eens zo een SDK ter beschikking, wat ga jij dan doen? En niet afkomen dat dit uitzonderingen zijn. Ingebedde systemen zijn zowat dé toekomst en daar heb je veelal geen of een zeer beperkte API. Volgens jouw redenering moeten we dan maar pech hebben, want geen enkele TI'er die weet hoe dan een simpel sort algorithme te implementeren.

sqrt heb ik niet zelf herontwikkeld maar ik gebruik wel een alternatieve versie die lookup tables gebruikt :p (ook niet altijd hoor, ik wou maar zeggen dat er wel degelijk mensen zijn die verder kijken als de standaard oplossingen). Waarin gebruik ik het? Right, gamedev. En dat is geen rocket science of zeer fancy gedoe, dat is de grootste of 2e grootste entertainment industrie ter wereld.

Zoals ik zei ga ik ook niet voor elk dwaas programmatje een eigen algoritme schrijven als dit totaal niet nodig is. Maar een basiskennis aan algoritmen en deze snel kunnen toepassen/schrijven in specifieke situaties zonder dat je al trucen moet uithalen om de standaardimplementaties te doen werken zoals jij het wilt is iets essentieel en iets dat veel te veel ontbreekt bij onze huidige generatie TI'ers. En dat heeft niets met academisch<->praktisch te maken.

SMa

Legacy Member
Met objecten zou ik de List-methode gebruiken,
met primitieve types zou ik een eigen algoritme gebruiken.
=> afhankelijk van de situatie

[BAT] Hydra

Legacy Member
Bavo aka Joske zei:
Killgore klinkt als iemand die licentiaat informatica doet, Krueger als iemand die reeds werkt. Ik als werkend mens geef vlotjes Krueger hier gelijk. Als het Javabetreft, en waarschijnlijk .NET dan zijn de meest courante zaken reeds in de API geïntegreerd, en indien niet, dan heeft ene of andere third party er een goede lib voor gemaakt.

Tenzij je bezig bent met rocket science of een grensverleggende 3D-engine, zullen bestaande oplossingen altijd de meest optimale zijn die je kan vinden. Want zij die het hebben gemaakt, hebben er ook over nagedacht, samen met zij die het eventueel hebben bijgestuurd.

Bestaande oplossingen lezen sneller (wat als iedereen Math.sqrt() zou implemeteren?) en krijg je sneller aan het werk.

Nog eens muggenziften:

Dit jaar is het eerste jaar waarin er geen licentiaatsopleidingen meer worden ingericht. Het zijn allemaal masteropleidingen nu. Het grootste verschil tussen de bachelor + master informatica ten opzichte van de kandidaat + licentiaat informatica is het aantal jaren dat men ervoor studeert. Bachelor + master informatica duurt 5 jaar. Kandidaat + licentiaat informatica duurde 4 jaar. Buiten dit feit zijn de diploma's wel "officieel" even veel waard.

Er studeren dit jaar wel nog een paar enkelingen af als licentiaat. Dit zijn mensen die 1, 2 of 3 vakjes opnieuw moeten doen en waarvoor er beslist is dat ze hun licentiaat gewoon mogen afmaken in plaats van aan de master te beginnen. Als ze een master zouden doen zou dit hen immers een extra jaar kosten.

dJeez

Legacy Member
[BAT] Hydra;9526979 zei:
Kandidaat + licentiaat informatica duurde 4 jaar.
:offtopic: Een schepje muggenzifterij erbovenop : da's niet noodzakelijk zo, op EHSAL was het vroeger nl. ook 5 jaar (3 jaar kandidaturen + 2 jaar licentiaat). En nu niet beginnen zeveren over univ vs hogeschool (ik ben nl. ook vrije student geweest op de VUB - kwestie van op 't Internet te kunnen anno 1995-6 :p).

sebbonny

Legacy Member
Ben nu bezig aan opleiding bachelor toegepaste informatica 2e jaar, nu voor het derde semester al java gekregen en nadruk heeft ALTIJD gelegen op het gebruiken van voor gedefinieerde methodes ipv zelf methodes te schrijven, tis maar wat ze je aanleren zeker... ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan