Kinder füttern :-)
-
Deswegen ja der Timestamp.
Du trägst jedes Kind bei der Geburt mit Timestamp ein und aktualisierst diesen wenn ein Fresspacket da ist.
Da Du weisst wie lange ein Kind ohne Frspacket lebt, musst Du nur suchen, welches Kind innerhalb der Grenze liegt. Den rest kannst Du ungesehen entsorgen da es ja sortiert ist.
-
BlackPepper schrieb:
Vielleicht hat mit jemand einen guten Tipp.
du könntest ja mal einen tag im kindergarten mitmachen.
aber vorher schön viel futtern, damit du nicht aus versehen verhungerst...
-
1310-Logik schrieb:
Dann machs mit der priority_queue.
Mach nen Zähler für die Pakete, die die eins kriegen erhöhst du um sagen wir 100.
Wenn Du etwas Zeit hast, schaust Du nach, wieviel Zeit vergangen ist und wieviel die Kids gegessen haben müssten in der Zeit. Alle die weniger bekommen haben, sind tot.Wenn ich jedem Kind einen Zähler gebe und die Priority Queue nach diesem Zähler sortieren lasse, stehen dann an einem Ende die Kinder die gerade gegessen haben und am anderen Ende die Kinder, die schon länger nicht mehr gegessen haben. Dann kann ich nämlich zu einem bestimmten Zeitpunkt ans anderen Ende sehen und muss nicht suchen, weil sich verhungerte Kinder dort befinden, ohne das ich was tuen muss. Lebt das Kind am anderen Ender der Priority Queue auch, kann ich sofort weiter Freßpakete verteilen, weil dann alle Kinder leben.
Grüße Max
-
Sagte schonmal jemand, dass das sehr makaber tönt?
Wofür züchtest du die Kinder denn? Internethandel?
-
Es gibt wie immer mehrere Möglichkeite, das Problem zu lösen:
[] abwarten - irgendwann sind alle Tot und das Problem hat sich erledigt
[] sag den Eltern Bescheid, sie sollen den Kindern ein Pausenbrot mitgeben
[] stell ein paar Arbeitslose ein, die Dir helfen, wenn Du das nicht alleine schaffst
[] nimm nur so viele Kinder auf, die Du auch versorgen kannstDabei frage ich mich, was das in einem C++-Forum zu tun hat. C++ ist zwar eine Programmiersprache, mit der man alles machen kann, aber das "alles" bezieht sich lediglich auf Softwareprobleme.
Tntnet

-
Kann ein Kind sich einfach nicht selber Löschen, wenn es stirbt?
Kind::Destroy(){Kindergarten->erase(this);delete this;}
-
phlox81 schrieb:
Kann ein Kind sich einfach nicht selber Löschen, wenn es stirbt?
Kind::Destroy(){Kindergarten->erase(this);delete this;}Hallo,
Das mußt du mir unbedingt genauer erklären. Ich meine den Sourcecode. Kannst Du ihn etwas näher erklären, denn ich verstehe nicht wer da wen löscht. Das wäre nämlich die Toplösung.
Grüße Max
-
Der Code ist zwar nicht von mir, aber relativ einfach zu verstehen:
Das
Kindergarten->erase(this);ist halt Pseudo-Code, weil wir nicht genau wissen, wie dein Kindergarten funktioniert, aber entweder müsste der Kindergarten halt global/static/Singleton/was auch immer sein oder jedes Kind müsste einen Zeiger auf den Kindergarten haben...
Mit erase(this) sagst du dem Kindergarten , er soll das Kind, dessen Methode da gerade ausgeführt wird, löschen.
Mit
delete this;löscht sich das Kind dann am Ende selber, das geht allerdings nur und NUR dann, wenn es auch auf dem Heap erzeugt wurde und nachher nicht noch irgendwer versucht, über einen ungültig gewordenen Zeiger auf das Kind zuzugreifen.
Wenn der Kindergarten die Kinder verwaltet, könnte der aber auch direkt das delete für das Kind aufrufen...
Felix
P.S.: Falls es an dem this liegt: this ist immer ein Zeiger auf das Objekt, in dessen Methode man sich gerade befindet.
-
Warum eigentlich ne priority-Queue und keine list? Das würde die Laufzeitkomplexität noch deutlich senken.
Wer gefüttert wird, wird hinten wieder angehängt, dadurch bleibt die Liste sortiert. Jedesmal, wenn Du einen fütterst räumste ne konstante Anzahl Leichen weg.
-
Phoemuex schrieb:
Das
Kindergarten->erase(this);ist halt Pseudo-Code, weil wir nicht genau wissen, wie dein Kindergarten funktioniert, aber entweder müsste der Kindergarten halt global/static/Singleton/was auch immer sein oder jedes Kind müsste einen Zeiger auf den Kindergarten haben...
Mit erase(this) sagst du dem Kindergarten , er soll das Kind, dessen Methode da gerade ausgeführt wird, löschen.Dann ist Kindergarten der Zeiger auf den Kindergarten, den jedes Kind mitführt. Also bittet das Kind den Kindergarten gelöscht zu werden.
Phoemuex schrieb:
Mit
delete this;löscht sich das Kind dann am Ende selber, das geht allerdings nur und NUR dann, wenn es auch auf dem Heap erzeugt wurde und nachher nicht noch irgendwer versucht, über einen ungültig gewordenen Zeiger auf das Kind zuzugreifen.
Wenn der Kindergarten die Kinder verwaltet, könnte der aber auch direkt das delete für das Kind aufrufen...
Felix
Hmm, das setzt aber voraus, das ich den Timer der Kinder mindere und das tue ich nicht, da ich keine Kinder besuche, die kein Freßpaket bekommen. Ich weiß nur, wer gerade eins bekommen hat.
Grüße Max
-
Jester schrieb:
Warum eigentlich ne priority-Queue und keine list? Das würde die Laufzeitkomplexität noch deutlich senken.
Wer gefüttert wird, wird hinten wieder angehängt, dadurch bleibt die Liste sortiert. Jedesmal, wenn Du einen fütterst räumste ne konstante Anzahl Leichen weg.Weil ich erst mal in der Liste denjenigen finden muss, der gefüttert wurde um ihn dann nach hinten zu setzten und das dauert zu lange. Derweil hab ich Freßpakete verloren. Die Liste ist schnell beim einfügen und schnell beim löschen, weil sie aber unsortiert ist, ist sie langsam beim Zugriff auf ein beliebiges Element. In einer map, die bereits zufriedenstellen benutze, habe ich bessere Zugriffszeiten. Die Adressen der Kinder kann ich ja zusätzlich in einer priority queue verwalten und somit habe ich schnellen zugriff auf verhungerte Kinder, die sich an einem Ender der Schlange befinden.
Grüße Max