Angenommen, ich habe einen Vektor von Werten, die die oberen Grenzen von Klassen zu klassifizieren (bin) Werte in. Also z.B. Der Vektor {1, 3, 5, 10} repräsentiert Bins [0, 1 [, [1, 3 [, [3, 5 [und [5,10 [. Wie implementiere ich die Klassifikation eines Zufallswertes V in einer dieser Klassen (0,1,2,3) in konstanter Zeit? Es ist trivial, die Liste der Grenzen zu gehen und zu stoppen, sobald V die obere Grenze des Behälters überschreitet; aber das ist O (n) bezüglich der Anzahl von Behältern; Ich versuche, dies in konstanter Zeit zu tun.Konstante Zeit Binning von Werten
Ich dachte, es war trivial, bevor ich tatsächlich den Code eintippte, indem ich eine Nachschlagetabelle aufstellte, jedes V durch einen bestimmten Wert in Abhängigkeit von den Klassengrenzen dividierte und dann das (gerundete) Ergebnis der Division verwendete Fachnummer in der Nachschlagetabelle. Aber ich finde es viel schwieriger, als ich gedacht habe, dies auf eine allgemeine Art und Weise zu machen, die die Größe der Nachschlagetabelle minimiert, während sie immer noch genau ist, ungeachtet des proportionalen Abstandes zwischen Fachgrenzen; und in einer Weise, die für alle realen Werte funktioniert. Mit Google finde ich nur Algorithmen, die die Grenzen der Bins bestimmen, zumindest unter Verwendung der Begriffe, die ich gemacht habe.
Wenn es sich wirklich um eine Zufallsstichprobe handelt, suchen Sie Google nach der Alias-Methode. –
Ich habe gerade gelernt, dass die umgekehrte eckige Klammer auch ein ausgeschlossenes Element anzeigt. Es ist ziemlich schmerzhaft anzuschauen, wenn sie so nebeneinander sind (im Vergleich zu "[0, 1)", was dasselbe bedeuten würde). – Dukeling