Hoihoi,
Ik heb het volgende programmeerprobleem in Ruby.
Ik heb een lijst met nummers. In een loop pak ik elke keer een nummer. Elk nummer moet een keer 'gepakt' zijn, voordat een nummber opnieuw gepakt kan worden.
Een nummer uit de lijst pakken kan op twee manieren.
- random
- gewogen (het ene nummer heeft een grotere kans geretourneerd te worden dan het andere nummer). Bijvoorbeeld nummerA heeft gewicht 1, nummberB gewicht 3 etc.
Ik zat eraan te denken dat het me het simpelste leek om een gewogen nummer het aantal keer van het gewicht in de lijst te zetten. Dus bij gewicht 1, 1x in de lijst; gewicht 2, 2x in de lijst, etc.
Nu los ik het probleem als volgt op:
Ik heb twee lijsten (arrays):
- een array met alle nummers (all_numbers);
- een array met de nummers die ik al een keer gehad heb (already_seen);
Ik doorloop de volgende stappen:
1. Ik bepaal welke nummers ik nog niet gehad heb als volgt:
2. Uit de nieuwe array pak ik een nieuw nummer, dit geef ik weer en voeg ik toe aan de array already_seen.
Maar volgens mij moet dit sneller en efficienter kunnen met behulp van een handig algoritme.
Ik heb bijvoorbeeld gehoord dat Google dit probleem oplost, niet door de twee arrays met elkaar te vergelijken, maar door van beide arrays een hash te maken en dat met elkaar te vergelijken... Masar hoe dat precies werkt, geen idee...
Heeft iemand een idee hoe ik mijn probleem efficienter kan aanpakken? Is hiervoor misschien een heel efficient algoritme?
Ik heb het volgende programmeerprobleem in Ruby.
Ik heb een lijst met nummers. In een loop pak ik elke keer een nummer. Elk nummer moet een keer 'gepakt' zijn, voordat een nummber opnieuw gepakt kan worden.
Een nummer uit de lijst pakken kan op twee manieren.
- random
- gewogen (het ene nummer heeft een grotere kans geretourneerd te worden dan het andere nummer). Bijvoorbeeld nummerA heeft gewicht 1, nummberB gewicht 3 etc.
Ik zat eraan te denken dat het me het simpelste leek om een gewogen nummer het aantal keer van het gewicht in de lijst te zetten. Dus bij gewicht 1, 1x in de lijst; gewicht 2, 2x in de lijst, etc.
Nu los ik het probleem als volgt op:
Ik heb twee lijsten (arrays):
- een array met alle nummers (all_numbers);
- een array met de nummers die ik al een keer gehad heb (already_seen);
Ik doorloop de volgende stappen:
1. Ik bepaal welke nummers ik nog niet gehad heb als volgt:
code:
1
| all_numbers - already_seen = not_seen |
2. Uit de nieuwe array pak ik een nieuw nummer, dit geef ik weer en voeg ik toe aan de array already_seen.
Maar volgens mij moet dit sneller en efficienter kunnen met behulp van een handig algoritme.
Ik heb bijvoorbeeld gehoord dat Google dit probleem oplost, niet door de twee arrays met elkaar te vergelijken, maar door van beide arrays een hash te maken en dat met elkaar te vergelijken... Masar hoe dat precies werkt, geen idee...
Heeft iemand een idee hoe ik mijn probleem efficienter kan aanpakken? Is hiervoor misschien een heel efficient algoritme?
[ Voor 15% gewijzigd door van.der.schulting op 21-03-2014 13:44 ]