Beiträge von Trisher

    Genau da ist ja das Problem. Im Endeffekt musst du ein Mapping finden, welches dann Zahlen im Array entspricht. also quasi ein int zu Wert und Anzahl. Das Problem ist, dass du die Werte irgendwie in Relation setzen musst. Bei deinem Algorithmus funktioniert dies explizit durch die Zuweisung zu einer bestimmten Position im Array, wobei die Position exakt dem Wert entspricht. Dies funktioniert aber eben nur bei Integern. Die Relation ist dann über die Position klar. Bei Floats geht das z.B. wieder nicht, weil du mit einem Float nicht auf ein Array zugreifen kannst. Um diese also zu soriteren, musst du sie in Relation setzen.
    Aber wenn du noch einen Algorithmus möchtest, der nicht auf Vertauschung basiert, dann wäre es einfach das Array abzulaufen und zB in eine Liste an der richten Position (hier sind Vergleiche nötig) einzufügen.
    Ich sehe ehrlich gesagt keine Lösung für das Problem mit der Hashmap. Du musst dazu ja wissen welche Werte du alle hast und selbst dann, musst du die Information über die Position und die Häufigkeit mitschleifen. Bei Ganzzahlen hast du den Vorteil, das Wert, Position und Anzahl eine besondere Konstellation bieten.

    Ich bin mittlerweile zu der Überzeugung gekommen, dass es mit einer HashMap nicht gut funkioniert. Ich sehe vorrangig zwei Probleme. Zum Einen steigt durch die Verwendung einer HashMap der Speicherverbrauch wieder dramatisch an. Außerdem glaube ich nicht dass es dann noch zu einem Zeitgewinn kommt, da das Erstellen einer HashMap/mehrerer HashMaps auch wieder Zeit kostet. Ich lasse mich aber gerne eines besseren belehren, aber es ist halt einfach ein Spezialfall des Integers, dass darüber die Position in einem Array zugeordnet werden kann. Das ist meinen Augen die ganze Magie an "SwitchSort".


    Übrigens finde ich die Idee sehr schön, dass du das "Übergangs"-Array nur so groß bemisst, wie tatsächlich die größte Zahl ist, das minimiert den Speicherverbrauch. Für den Spezialfall anzahl = größe ist es schneller "Übergangs"-Array gleich auf die Größe von Anzahl zu setzen und der Speicherplatzverlust ist minimal. Allerdings funktioniert es nur bis anzahl = größe danach kann es in eine ArrayIndexOutOfBounds-Exception laufen.
    Tatsächlich scheint es auch eine große Diskrepanz in der Zeit zu geben, wenn größe << anzahl.


    Für mich ist und bleibt es ein Spezialfall des Arrays mit Integer-Werten. Wenn es jemand schafft schneller als Array.sort() auf floats zu sein, wäre ich beeindruckt.
    Übrigens sind 10^9 an "Zahlenumfang" oder Anzahl an Zahlen selbst bei 4GB nicht mehr möglich ( benötigt werden jeweils 4,4gb). Beides zusammen ist selbst mit 10GB Speicher für die VM (!!!) nicht mehr möglich.


    Array.sort() setzt auf QuickSort. Die Implementierung hat aber den Vorteil, dass sie echt Multi-Threaded ist, was den Vorteil hat, dass es plötzlich viel schneller wird. Ich habe zu Hause nur einen 4 Kerner, ich werde morgen mal 10^9 und 10^8 per Array.sort() auf der Arbeit durchjagen (4Kerne+HT).


    Aber ich bin echt fasziniert von dem Ansatz, den habe ich seit dem ich angefangen habe zu programmieren noch nicht gesehen. Wobei ein Algorithmus für einen ausgeglichenen Baum dem sehr nahe kam.


    Edit: Das Ganze zeigt mir aber gerade nur, dass 0.22 immernoch nicht released ist... Verdammt
    Edit2: CountingSort auf Wikipedia

    Ups, dass mit dem HashSet und HashMap war natürlich mein Fehler. In der Tat hat HashMap keine sinnvolle Sortierung. HashSet dummerweise auch nicht(dachte da an Collections.sort())
    Zu dem Algorithmus selber: bei 10^7 Zahlen bekomme ich ungefähr die 4-5fache Geschwindigkeit vom Arrays.sort(). 10^8 ist selbst mit 1GB für die VM nicht mehr machbar wegen des Speicherverbrauchs, was es schon fast unmöglich macht das auf 32bit Systemen einzusetzen. bei 2GB für die VM sind es auch wieder in etwa 4-5fache Geschwindigkeit.



    Meine Tests soweit (bei 10^8 Zahlen):
    "SwitchSort" ~2500-2600ms
    Array.sort() ~10000ms
    Collections.sort() ~ 72000ms (sehr sehr sehr speicherintensiv)


    Ichhab mir das ganze jetzt nochmal durch den Kopf gehen lassen und baue das gerade ein wenig um. Ich bin aber mit dem HashMap nicht so glücklich.

    Das ganze sieht interessant aus, wird aber nicht gut mit anderen Werten als ganzen Zahlen funktionieren. Negative Zahlen ließen sich noch erreichen, wenn du neben der höchsten auch die niedgrigste Zahl ermittelst und dann dein "Übertrags-Array" entsprechend der Spanne zwischen größter und kleinster Zahl dimensionierst. Aber ganz davon abgesehen mag der Algorithmus zwar recht schnell sein von der Komplexität, aber er ist weder generisch noch besonders speicherfreundlich. Um generisch zu sein, muss man einfach Werte vergleichen, das kann man dann auch einfach auslagern in die Werte selbst. Und was den Speicher angeht, brauchst du im Vergleich zu "Vertauschenden"-Algorithmen doppelt so viel Speicher.
    Fazit: Interessanter Algorithmus, der nicht praktisch verwendbar ist.


    PS: Wenn hier schon mit Hashsets hantiert wird, kann man es auch gleich lassen, die bieten nämlich Sortierung

    Das ist doch irgendwie Mist, man muss ja jetzt fast gar nichts mehr machen um ein Docking-Manöver durchzuführen. 10 Klicks und ich bin vom Launchpad aus im All und angedockt. Auf der anderen Seite eine riesen Erleichterung...

    Nur um nochmal das ursprüngliche Problem zu klären:
    Die fehlenden Fenster (z.B. Smart A.S.S.) treten auf wenn ihr KSP 0.21+ und MechJeb 1.x habt. Nur MechJeb 2.x ist kompatibel.
    Ansonsten kann ich nur sagen, dass es bei mir auch wunderbar funktioniert, wenn MechJeb irgendwo am oberen Ende der Rakete angebracht ist, es muss wohl aber tatsächlich lotrecht angebracht werden.

    Dann muss ich mich wohl doch umgewöhnen. Diese Funktion hatte ich auch schon gefunden, aber ich wollt eigentlich meinen Knopf wieder haben, wo ich drauf haue und MechJeb baut mir einen Orbit in der Höhe auf. Naja dann muss ich mich mal mit den Funktionen auseinandersetzen und meine Rakete umbauen, automatisch funktionierts nämlich nicht, ich muss zwischendurch ein Manöver per Hand durchführen sonst kollidiert die Rakete mit ihrem Debris. Und den Autopiloten danach wieder einschalten funktioniet auch nicht mit der Rakete, sie gerät dann ins schlingern, bzw. sie wird plötzlich total abgebremst...

    Guten Abend,


    ich baue derzeit meine Raumstationen mit MechJeb. Leider funktioniert die Version 1.9.8 offenbar nicht mehr mit KSP 0.21.1. Die neue MechJeb Version 2.0.8 hat keine Orbital Operations oder ich finde sie einfach nur nicht mehr. Kann mir da jemand helfen und mir sagen, ob es das nicht mehr gibt oder wie man das jetzt richtig macht. Es gibt zwar das Orbital Adjustment, dass ist mir aber zu unflexibel. Die Orbital Operations waren perfekt für mich.



    Danke im Vorraus.