Kolozzeum Forum - Sveriges största träningsforum
Gå tillbaka   Kolozzeum Forum - Sveriges största träningsforum > Träning > Allmänt Forum

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2020-02-26, 19:27   #2281
KoloKille
Banned User
 
Reg.datum: May 2015
Inlägg: 261
Citat:
Ursprungligen postat av Brofessorn Visa inlägg
Du glömde tiotusen rader JS
hm jag får lära mig det
KoloKille är inte uppkopplad   Svara med citat
Gammal 2020-02-27, 18:45   #2282
TranceII
Registered User
 
TranceIIs avatar
 
Reg.datum: Jun 2013
Inlägg: 225
Citat:
Ursprungligen postat av KoloKille Visa inlägg
hm jag får lära mig det
iFrame är rätt i vissa sammanhang men undvik om du inte absolut måste. Om du måste använda det så sök på iframe resize också så du får det rätt från början.
TranceII är inte uppkopplad   Svara med citat
Gammal 2020-02-27, 19:11   #2283
KoloKille
Banned User
 
Reg.datum: May 2015
Inlägg: 261
Citat:
Ursprungligen postat av TranceII Visa inlägg
iFrame är rätt i vissa sammanhang men undvik om du inte absolut måste. Om du måste använda det så sök på iframe resize också så du får det rätt från början.
Jag ska ha det på min wordpress-sida för att lägga in google maps. Ska göra en karta över coronaviruset.
KoloKille är inte uppkopplad   Svara med citat
Gammal 2020-02-27, 19:20   #2284
TranceII
Registered User
 
TranceIIs avatar
 
Reg.datum: Jun 2013
Inlägg: 225
Citat:
Ursprungligen postat av KoloKille Visa inlägg
Jag ska ha det på min wordpress-sida för att lägga in google maps. Ska göra en karta över coronaviruset.
Typ: https://en.support.wordpress.com/google-maps/

Eller vill du ha något mer custom?
TranceII är inte uppkopplad   Svara med citat
Gammal 2020-03-02, 18:36   #2285
Brofessorn
Registered User
 
Brofessorns avatar
 
Reg.datum: May 2015
Inlägg: 1 601
Är det någon som pillat med WebAssembly tidigare? Överväger det för att kunna köra Java eller Rust på webbklienten, men känns som en riktig time sink att sätta in sig i.
Brofessorn är inte uppkopplad   Svara med citat
Gammal 2020-03-05, 15:01   #2286
Wequ
Registered User
 
Reg.datum: Jul 2010
Inlägg: 77
Vad kommer skillnaden bli i metoderna från en single linked list till en double linked list?

Min add metod i single linked list ser ut så här nu och fungerar som den ska:
Kod:
public void add(int index, E element) throws IndexOutOfBoundsException {
        if (index < 0 || index > size()){
            throw new IndexOutOfBoundsException();
        }

        Node newNode = new Node(element);    //Den här noden är det som ska sättas in
        Node prevNode = null;
        Node nextNode = head;

        if(index == 0){                   //kollar först om index är 0, är den det ska man stoppa in i början av listan och sätta nytt head.
            newNode.setmNextNode(head);
            head = newNode;
        }
        else {
            for (int i = 0; i < index; i++) {     // Vi vill hitta indexet före index, för att med det indexet peka på indexet vi ska sätta in på
                prevNode = nextNode;
                nextNode = nextNode.getmNextNode();
            }
            if (nextNode == null) {                  //Är nextNode null ska vi stoppa in i slutet i listan
                prevNode.setmNextNode(newNode);    //Då sätter vi prevNodes nästa nod till newNode och det är nu det sista elementet i listan
            } else {
                    prevNode.setmNextNode(newNode);  //Stoppa in någon annanstans än start/slut: prevNodes nästa nod blir newNode
                    newNode.setmNextNode(nextNode);  //newNode pekar på nästa nod som är nextNode
            }
        }
        size ++;
    }
Vad blir skillnaden om man ska implementera samma metod i en double linked list? Måste man ha en referens som pekar på tail nu också?
Wequ är inte uppkopplad   Svara med citat
Gammal 2020-03-05, 15:15   #2287
svenbanan
Banned User
 
Reg.datum: Jan 2012
Inlägg: 10 099
Citat:
Ursprungligen postat av Wequ Visa inlägg
Vad kommer skillnaden bli i metoderna från en single linked list till en double linked list?

Min add metod i single linked list ser ut så här nu och fungerar som den ska:
Kod:
public void add(int index, E element) throws IndexOutOfBoundsException {
        if (index < 0 || index > size()){
            throw new IndexOutOfBoundsException();
        }

        Node newNode = new Node(element);    //Den här noden är det som ska sättas in
        Node prevNode = null;
        Node nextNode = head;

        if(index == 0){                   //kollar först om index är 0, är den det ska man stoppa in i början av listan och sätta nytt head.
            newNode.setmNextNode(head);
            head = newNode;
        }
        else {
            for (int i = 0; i < index; i++) {     // Vi vill hitta indexet före index, för att med det indexet peka på indexet vi ska sätta in på
                prevNode = nextNode;
                nextNode = nextNode.getmNextNode();
            }
            if (nextNode == null) {                  //Är nextNode null ska vi stoppa in i slutet i listan
                prevNode.setmNextNode(newNode);    //Då sätter vi prevNodes nästa nod till newNode och det är nu det sista elementet i listan
            } else {
                    prevNode.setmNextNode(newNode);  //Stoppa in någon annanstans än start/slut: prevNodes nästa nod blir newNode
                    newNode.setmNextNode(nextNode);  //newNode pekar på nästa nod som är nextNode
            }
        }
        size ++;
    }
Vad blir skillnaden om man ska implementera samma metod i en double linked list? Måste man ha en referens som pekar på tail nu också?
Varje element i en dubbellänkad lista har en pekare till elementet framför och en pekare till elementet som kommer efter. Det första elementets pekare till föregående element pekar alltså till NULL eftersom det inte finns något element före det första elementet. Det sista elementets pekare till nästa element pekar (som vanligt) till NULL.

Så när man lägger till och tar bort element så måste man se till att dessa pekare pekar på rätt grejer.

EDIT: Skillnaden mot en vanlig lista är ju alltså att där finns enbart en länk till nästa element.

EDIT2: Om du ska stoppa in ett nytt element efter element A och före element B, så måste du alltså se till att "next element" i uppdateras till att peka på ditt nyskapade element. Dessutom måste du uppdatera "previous element" i element B så att den också pekar på ditt nyskapade element.

Senast redigerad av svenbanan den 2020-03-05 klockan 15:22.
svenbanan är inte uppkopplad   Svara med citat
Gammal 2020-03-05, 16:23   #2288
Wequ
Registered User
 
Reg.datum: Jul 2010
Inlägg: 77
Citat:
Ursprungligen postat av svenbanan Visa inlägg
Varje element i en dubbellänkad lista har en pekare till elementet framför och en pekare till elementet som kommer efter. Det första elementets pekare till föregående element pekar alltså till NULL eftersom det inte finns något element före det första elementet. Det sista elementets pekare till nästa element pekar (som vanligt) till NULL.

Så när man lägger till och tar bort element så måste man se till att dessa pekare pekar på rätt grejer.

EDIT: Skillnaden mot en vanlig lista är ju alltså att där finns enbart en länk till nästa element.

EDIT2: Om du ska stoppa in ett nytt element efter element A och före element B, så måste du alltså se till att "next element" i uppdateras till att peka på ditt nyskapade element. Dessutom måste du uppdatera "previous element" i element B så att den också pekar på ditt nyskapade element.
Så man kan bara lägga till på det här viset så borde det funka ?
Kod:
 public void add(int index, E element) throws IndexOutOfBoundsException {
        if (index < 0 || index > size()){
            throw new IndexOutOfBoundsException();
        }

        Node newNode = new Node(element);    //Den här noden är det som ska sättas in
        Node prevNode = null;
        Node nextNode = head;

        if(index == 0){                   //kollar först om index är 0, är den det ska man stoppa in i början av listan och sätta nytt head.
            newNode.setmNextNode(head);   //Nya noden pekar på nuvarande head noden
            head.setmPrevNode(newNode);   //head sätter prevnode till nya noden.
            newNode.setmPrevNode(null);    //Nya noden pekar på null
            head = newNode;                //nya noden är ""nytt" head
        }
        else {
            for (int i = 0; i < index; i++) {     // Vi vill hitta indexet före index, för att med det indexet peka på indexet vi ska sätta in på
                prevNode = nextNode;
                nextNode = nextNode.getmNextNode();
            }
            if (nextNode == null) {                  //Är nextNode null ska vi stoppa in i slutet i listan
                prevNode.setmNextNode(newNode);    //Då sätter vi prevNodes nästa nod till newNode och det är nu det sista elementet i listan
                tail = newNode;                  
            } else {
                prevNode.setmNextNode(newNode);  //Stoppa in någon annanstans än start/slut: prevNodes nästa nod blir newNode
                newNode.setmPrevNode(prevNode);   //pekar newNode previous node på  "prevNode"
                newNode.setmNextNode(nextNode);  //newNode pekar på nästa nod som är nextNode
                nextNode.setmPrevNode(newNode);  //nextNode prevnode pekar på newNode
            }
        }
        size ++;
    }
Tror jag fått med alla "villkor" ?
Wequ är inte uppkopplad   Svara med citat
Gammal 2020-03-05, 21:45   #2289
Wequ
Registered User
 
Reg.datum: Jul 2010
Inlägg: 77
Har kommit vidare med doublelinked list men har fastnat på en metod, lastindexOf ger fel resultat men förstår inte varför?

indexOf metoden fungerar som den ska, tänkte att lastIndexOf bara är tvärtom som börjar från tail? Missar jag något?

Båda metoderna ska returnera det index där första träffen av elementet förekommer, indexof börjar från head, lastindexof börjar från tail.

Kod:
@Override
    public int indexOf(E element) {
        int index = 0;
        Node current = head;

        while (current != null){     
            if (current.getmElement().equals(element)){   //Matchar dom, returnera indexet.
                return index;
            }
            index ++;
            current = current.getmNextNode();    // Hoppa till nästa nod.
        }
        return -1;
    }

    @Override
    public int lastIndexOf(E element) {
        int index = size;
        Node current = tail;

        while (current != null){    
            if (current.getmElement().equals(element)){   //Matchar dom, returnera indexet.
                return index;
            }
            index --;
            current = current.getmPrevNode();    // Hoppa till föregående nod.
        }
        return -1;
    }

Senast redigerad av Wequ den 2020-03-05 klockan 21:47.
Wequ är inte uppkopplad   Svara med citat
Gammal 2020-03-05, 21:58   #2290
Rickard
Registered User
 
Rickards avatar
 
Reg.datum: Feb 2009
Ort: Göteborg
Inlägg: 4 160
Citat:
Ursprungligen postat av Wequ Visa inlägg
Har kommit vidare med doublelinked list men har fastnat på en metod, lastindexOf ger fel resultat men förstår inte varför?

indexOf metoden fungerar som den ska, tänkte att lastIndexOf bara är tvärtom som börjar från tail? Missar jag något?

Båda metoderna ska returnera det index där första träffen av elementet förekommer, indexof börjar från head, lastindexof börjar från tail.

Kod:
@Override
    public int indexOf(E element) {
        int index = 0;
        Node current = head;

        while (current != null){     
            if (current.getmElement().equals(element)){   //Matchar dom, returnera indexet.
                return index;
            }
            index ++;
            current = current.getmNextNode();    // Hoppa till nästa nod.
        }
        return -1;
    }

    @Override
    public int lastIndexOf(E element) {
        int index = size;
        Node current = tail;

        while (current != null){    
            if (current.getmElement().equals(element)){   //Matchar dom, returnera indexet.
                return index;
            }
            index --;
            current = current.getmPrevNode();    // Hoppa till föregående nod.
        }
        return -1;
    }
Antar att felet du får är förväntat index +1?
Sista index borde vara size-1 och inte size om jag kollar på hur indexOf funkar.
Rickard är inte uppkopplad   Svara med citat
Gammal 2020-03-05, 22:06   #2291
Wequ
Registered User
 
Reg.datum: Jul 2010
Inlägg: 77
Citat:
Ursprungligen postat av Rickard Visa inlägg
Antar att felet du får är förväntat index +1?
Sista index borde vara size-1 och inte size om jag kollar på hur indexOf funkar.
ja precis det blir index +1

Provade att ändra till
Kod:
int index = size - 1 ;
och det verkar funka nu!

Fan vad knas, är bergsäker på att jag provade samma grej för någon timme sen
Wequ är inte uppkopplad   Svara med citat
Gammal 2020-03-09, 12:37   #2292
Wequ
Registered User
 
Reg.datum: Jul 2010
Inlägg: 77
Vilken datastruktur skulle ni välja i det här fallet?

Vi har en fil med data från 1946-2019 som innehåller temperaturmätningar, filen består av flera tusen rader som ser ut såhär
Kod:
...
1972-11-17;00:00:00;3.5;G
1972-11-17;01:00:00;3.0;Y
1972-11-17;02:00:00;4.0;Y
1972-11-17;03:00:00;3.0;Y
1972-11-17;04:00:00;3.0;Y
1972-11-17;05:00:00;1.0;Y
1972-11-17;06:00:00;-0.5;G
...
Till datastrukturen ska ett par metoder implementeras där man för det mesta ska söka i datan mellan två datum och plocka ut medelvärden etc.

Så det kommer alltså för det mesta ske mycket traversering i datan. Vad är en passande datastruktur att använda sig utav? Jag tänker en vanlig arraylist? men det kanske finns något som är mer lämpligt?
Wequ är inte uppkopplad   Svara med citat
Gammal 2020-03-09, 14:11   #2293
svenbanan
Banned User
 
Reg.datum: Jan 2012
Inlägg: 10 099
Citat:
Ursprungligen postat av Wequ Visa inlägg
Vilken datastruktur skulle ni välja i det här fallet?

Vi har en fil med data från 1946-2019 som innehåller temperaturmätningar, filen består av flera tusen rader som ser ut såhär
Kod:
...
1972-11-17;00:00:00;3.5;G
1972-11-17;01:00:00;3.0;Y
1972-11-17;02:00:00;4.0;Y
1972-11-17;03:00:00;3.0;Y
1972-11-17;04:00:00;3.0;Y
1972-11-17;05:00:00;1.0;Y
1972-11-17;06:00:00;-0.5;G
...
Till datastrukturen ska ett par metoder implementeras där man för det mesta ska söka i datan mellan två datum och plocka ut medelvärden etc.

Så det kommer alltså för det mesta ske mycket traversering i datan. Vad är en passande datastruktur att använda sig utav? Jag tänker en vanlig arraylist? men det kanske finns något som är mer lämpligt?
Här kan du jämföra några olika datastrukturer och se vilken typ av prestanda som kan man kan tänkas få vid olika typer av operationer på dessa strukturer. Så du får fundera på exakt hur du kommer använda datastrukturen och vad som kan tänkas bli flaskhalsar för dig.

https://en.wikipedia.org/wiki/Search...-case_analysis

Hittade även en länk till en artikelserie om datastrukturer där författaren listar pros och cons för lite olika strukturer. Jag har inte läst artikeln, men detta är kapitel två. Vill du läsa mer om datastrukturer i allmänhet får du kanske börja med kapitel 1.

https://medium.com/omarelgabrys-blog...n-6689d725b3b0

Senast redigerad av svenbanan den 2020-03-09 klockan 14:21.
svenbanan är inte uppkopplad   Svara med citat
Gammal 2020-03-09, 14:35   #2294
Wequ
Registered User
 
Reg.datum: Jul 2010
Inlägg: 77
Citat:
Ursprungligen postat av svenbanan Visa inlägg
Här kan du jämföra några olika datastrukturer och se vilken typ av prestanda som kan man kan tänkas få vid olika typer av operationer på dessa strukturer. Så du får fundera på exakt hur du kommer använda datastrukturen och vad som kan tänkas bli flaskhalsar för dig.

https://en.wikipedia.org/wiki/Search...-case_analysis

Hittade även en länk till en artikelserie om datastrukturer där författaren listar pros och cons för lite olika strukturer. Jag har inte läst artikeln, men detta är kapitel två. Vill du läsa mer om datastrukturer i allmänhet får du kanske börja med kapitel 1.

https://medium.com/omarelgabrys-blog...n-6689d725b3b0
Den var bra!

Är mest search, find min, find max som kommer användas så det verkar som att det står mellan en unsorted array och sorted/unsorted linked list. Båda har O(n) på search, find min, find max.

Senast redigerad av Wequ den 2020-03-09 klockan 14:41.
Wequ är inte uppkopplad   Svara med citat
Gammal 2020-03-09, 14:39   #2295
Xtreme-G
No brain, no gain
 
Xtreme-Gs avatar
 
Reg.datum: Feb 2005
Ort: Stockholm/Linköping
Inlägg: 509
Citat:
Ursprungligen postat av Wequ Visa inlägg
Den var bra!

Är mest search, find min, find max som kommer användas så det verkar som att det står mellan en unsorted array och unsorted linked list. Båda har O(n) på search, find min, find max.
... som är mycket värre än O(1) för sorterade datastrukturer, vilket din data är.

Det som fäller avgörandet är väl hur snabbt det behöver vara vid insättningar.
Xtreme-G är inte uppkopplad   Svara med citat


Svara


Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +1. Klockan är nu 06:50.


Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
Copyright 2015, Kolozzeum (TM)