Wie wollen Sie Sortieren und effizient zu finden, Elemente in einem cell-array (Zeichenfolgen) in die Oktave?
Gibt es integrierte Funktionen für das?
- Gegeben eine lexikographisch sortiert cell array, können Sie die Funktion 'lookup' in octave ausführen der binären Suche. Alles, was jetzt bleibt, ist die Sortierung 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja prüfen: http://www.obihiro.ac.jp/~suzukim/masuda/Oktave/html3/octave_36.html#SEC75
0
wenn Sie Sie nicht finden. Ich wundere mich über die Effizienz...Ist es ein brute-force-Suche?GNU Octave Suche ein cell-array von Zeichenketten in linearer Zeit
O(n)
:Die andere Antwort hat
cellidx
ist abgeschrieben von octave, er läuft immer noch, aber Sie sagen, zu verwendenismember
statt, wie diese:'Welt' ist in der index-3-Steckplatz. Dies ist eine teure die lineare Zeit O(n) operation, weil es zum iterieren durch alle Elemente, ob oder nicht es ist gefunden.
Zu erreichen logarathmic Zeit O(log n) Lösung, dann ist deine Liste kommen muss, vorsortiert und dann Sie können verwenden Sie die binäre Suche:
, Wenn Sie Ihre cell-array ist schon sortiert, Sie können tun
O(log-n)
schlimmsten Fall:Zu Sortieren das array, wenn es nicht bereits:
Komplexität der Sortierung hängt von der Art der Daten, die Sie haben, und was auch immer Sortieren Algorithmus GNU octave Sprache-Autoren ausgewählt, es ist irgendwo zwischen
O(n*log(n))
undO(n*n)
.Scheuen Sie sich nicht, auf das Klebeband, mit dem das Geburtsdatum, es ist die einzige halten die Einheit zusammen.
Den cellidx Lösung erfüllt nicht die OP-Effizienz-Anforderung, und ist veraltet (wie bereits von
help cellidx
).Håvard Geithus in einem Kommentar vorgeschlagen, die lookup () - Funktion auf ein sortiert cell array von strings, das ist deutlich effizienter als cellidx. Es ist immer noch eine binäre Suche wenn, in der Erwägung, dass die meisten modernen Sprachen (und auch viele 20 Jahre alten) geben Sie uns einfach Zugriff auf assoziative arrays, das wäre ein deutlich besserer Ansatz.
Während Oktave nicht offensichtlich verknüpft haben, arrays, das ist effektiv das, was der interpreter für ocatve-Variablen, einschließlich Strukturen, so können Sie uns, die, wie hier beschrieben:
http://math-blog.com/2011/05/09/associative-arrays-and-cellular-automata-in-octave/
Konvertieren von Matlab Octave gibt es einen Container.Anzeigen-äquivalent? schlägt vor, javaObject("java.util.Hashtable"). Das wäre zu kommen mit einigen setup-Aufwand, aber wäre ein performance-Gewinn, wenn Sie es eine Menge. Vielleicht ist es sogar sinnvoll Glied in einer Bibliothek, geschrieben in C oder C++? Überlegen Sie, ob dies ein vertretbares option, obwohl.
Caveat: ich bin relativ neu in der Oktave, und schreiben das auf, als ich die Forschung selbst (die, wie ich aufgewickelt hier). Ich habe noch keine tests über die Effizienz dieser Techniken, und zwar habe ich eine faire Kenntnis der zugrunde liegenden algorithmen, ich kann machen unvernünftigen Annahmen über das, was tatsächlich effizienter in die Oktave.