Ich möchte eine Prioritätswarteschlange definieren, in der Prioritäten Komponenten in zwei verschiedenen Währungen enthalten. Zum Beispiel kostet Artikel A 1 USD + 20 Yen. Diese Warteschlange hat zwei Methoden, insert(priceInUsd, priceInYen)
und popMin(exchangeRate)
, die einen Preis von einem US-Dollar in Yen kostet und den Artikel mit den niedrigsten Gesamtkosten in USD und Yen bei diesem Wechselkurs veröffentlicht. Wie implementiere ich das?Prioritätswarteschlange, wo Werte eine Summe von zwei Währungen sind und popMin einen Wechselkurs verwendet
Hier sind Ideen meine bisher:
- einen k-d-Baum verwenden. Die Einfügung dauert log (n). Ich denke, Sie können findMin durch eine geringfügige Änderung am normalen k-d-Baum-Nearest-Neighbor-Algorithmus implementieren, also sollte dies angeblich log (n) Zeit dauern. Wikipedia ist eine Art Hedge, ob k-d Baum nächster Nachbar ist wirklich log (n) schlimmsten Fall, wenn Sie schreckliche Daten haben, so bin ich mir nicht sicher. Außerdem habe ich noch nie einen besonders zuverlässig aussehenden Quellennachweis gesehen, dass kd-Bäume eine Log (n) -Einfügung erlauben.
- Behalten Sie die konvexe Hülle der Punkte und Schleife über alles darin, wenn Sie wollenMin. Worst Case n, aber wenn es normalerweise nur
n**(1/3)
Dinge in Ihrer konvexen Hülle gibt, ist das im Durchschnitt in Ordnung.
Bitte seien Sie genauer, was Ihre Sortierkriterien sind ... 'popMin (exchangeRate)' würde vorschlagen, dass Sie das Minimum (für welchen Standard?) Für einen bestimmten Wechselkurs erhalten möchten. – grek40
Ich möchte den günstigsten Artikel nach Gesamtkosten bekommen; Sie verwenden den Wechselkurs, um das Wertepaar in eine einzelne Kosten zu konvertieren. –
Für einen dynamischen Wechselkurs gibt es eine Reihe von Artikeln, die nicht bestellt werden können: für 'Item1 (Dollar, Yen)' und 'Item2 (Dollar, Yen)' kann sich ihre Wertreihenfolge in Abhängigkeit vom Wechselkurs ändern, if 'sign (Item1.dollar - Item2.dollar)! = sign (Item1.yen - Item2.yen)' Vielleicht hilft das beim Aussortieren möglicher Lösungen – grek40