Avatar billede juks Novice
25. juli 2012 - 17:09 Der er 6 kommentarer og
1 løsning

Besparelses algoritme (Clarke & wright) liste(afstande) =

Hej I forbindelse med en skole opgave er jeg igang med at lave en algoritme. men jeg er allerede havnet i et problem.

jeg har lavet en class til min afstande

    class Afstande
    {
        public int i { get; set; }
        public int j { get; set; }
        public double kant { get; set; }
}
dem har jeg i en liste _Afstande

nu skal jeg så have lavet en liste over alle mulige besparelser

si,j = ci,0 + c0,j − ci,j

men hvordan sikre jeg mig at jeg får udregnet det for alle punkter i listen
Avatar billede Slettet bruger
25. juli 2012 - 18:48 #1
Du har ikke rigtig skrevet imellem hvor mange punkter eller bare 2?
jeg har lavet lille eks. på hvordan man gør det imellem 2

http://pastebin.com/LcRw0k6P

håber det er noget du kan bruge. Eller bare spørg igen.
Avatar billede trini Nybegynder
25. juli 2012 - 19:53 #2
Her er en mulig løsning hvor besparelser bliver gemt i et 2-dimsionelt array: http://pastebin.com/YxRb94gV

Du kan også udvide din afstand-klasse med en besparelse-property og gemme dine beregninger i denne (altså på list-form, som du efterspurgte): http://pastebin.com/Z6pdeUv4
Avatar billede juks Novice
25. juli 2012 - 20:37 #3
Jeg takker det var helt perfekt , måske ikke så hurtigt men det viker..

Tak til josh også ..
Avatar billede juks Novice
25. juli 2012 - 20:56 #4
må lige gentage tusind tak . har brugt hele dagne og set mig blind på det.. tusind tak
Avatar billede trini Nybegynder
25. juli 2012 - 21:00 #5
Hvis du bruger den version hvor afstande-klassen udvides kan du erstatte for-løkken med følgende:

foreach (var afstand in _afstande)
{
    var ci0 = afstand.i == 0 ? 0 : _afstande.Single(a => a.i == 0 && a.j == afstand.i).kant;
    var c0j = afstand.j == 0 ? 0 : _afstande.Single(a => a.i == 0 && a.j == afstand.j).kant;
    afstand.besparelse = ci0 + c0j - afstand.kant;
}

Det burde gå lidt hurtigere. Skal det gå endnu hurtigere så brug Parallel.ForEach i stedet.

Du kunne også overveje at gemme dine afstande i et 2-dimensionelt array, så man kan slå dem op i stedet for at søge listen igennem hele tiden.
Avatar billede juks Novice
25. juli 2012 - 21:07 #6
jaa men er lidt presset iht til at jeg snart skal aflevere så skal "bare" have programmet til at spille så må jeg´fin tune til min candidat i stedet :-)
Avatar billede trini Nybegynder
25. juli 2012 - 21:13 #7
Helt i orden. Pøj pøj med det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester