|
|
Geschwindigkeitsoptimierung? |
|
Sillicoid |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 13.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.04.2008, 22:58
Titel: Geschwindigkeitsoptimierung?
|
|
|
|
|
Hi, im Anhang habe ich die vollständigen Quellcode von einem kleinen Matlab Programm angehängt was ich erstellt habe.
Im groben gehts darum, daß zu einer bzw. vielen später zufaellig eingegebenen Zahl (Telefonnummer) alle dazu möglichen Wortkombinationen die sich mit einer amerikanischen Handytastaturbeschriftung (0 = e; 1 = j,n,q usw) ergeben ausgegeben werden.
Weiterhin sollen auch alle Kombinationen erstellt werden indem eine der Ziffern in der Zahl ausgelassen wird.
Also z.b. aus 18098230 erhält man als möglcihe Ergebnisse:
'no ego rye'
'no 0 go rye'
'no 0 horde'
'no 0 horse'
Dazu bilde ich zunächst alle möglichen Kombinationen und vergleiche diese (bzw. Teile davon) dann mit dem String Array was meine Wortdatenbank enthält. Mehr möchte ich dazu erstmal garnicht beschreiben, denn wer mir Tipps zur Optimierung geben möchte muss sich eh den Quellcode anschauen
Mir gehts darum, daß zur Zeit für eine einzige Eingabezahl von 8 Ziffern Matlab auf meinem Rechner (X2 4200) ganze 17 Sekunden benötigt um die Kombinationen zu berechen und ich die Vermutung habe das irgendwo in meinem Programm etwas stark ineffizient ist.
Falls also jemand die Zeit und Lust findet sich einmal durch meinen Code zu schlagen, würde ich mich sehr über Tipps zur Optimierung freuen.
Mfg
Beschreibung: |
|
Download |
Dateiname: |
code.zip |
Dateigröße: |
133.33 KB |
Heruntergeladen: |
1260 mal |
|
|
|
|
|
slay |
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 08.04.08
|
|
|
|
Wohnort: HH
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2008, 13:40
Titel:
|
|
Hi,
hab leider keine Zeit, mich durch den Code zu wühlen, aber als Anhaltspunkt:
hast du schonmal den Profiler bemüht? Also mit
vor Ausführung und
nach Ausführung... Damit hab ich eigentlich immer gute Optimierungen hinbekommen...
|
|
|
Sillicoid |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 13.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2008, 14:16
Titel:
|
|
Jo, hab ich gerade auch entdeckt.
Raus kommt dabei aber im Endeffekt nur das, was ich schon wusste. Die ganzen Vergleiche mit der langen Wortdatenbank kosten am meisten Zeit.
(vorallem da dort Matlab automatisch erstmal die komplette Wortliste versucht zu sortieren)
Mir ist auch bewusst, das für das gegebene Problem Matlab vermutlich eine sehr ungünstige Plattform ist, ich wollte aber einfach mal austesten wie schnell man sowas mit Matlab lösen kann und daher wärs nun interessant wie weit man die Rechenzeit noch drücken kann.
Es soll ja angeblich C++ Programme geben diese Aufgaben für 1000 Nummern auf einmal in ein paar Sekunden lösen, daher sieht mir 16 Sekunden für nur eine Zahl irgendwie komisch aus
Vielleicht ist auch einfach mein Programm als ganzes ineffizient und gescheite Laufzeiten nur mit irgendwelchen Baumstrukturen für die Wortdatenbank zu erreichen
|
|
|
Titus |
Forum-Meister
|
|
Beiträge: 871
|
|
|
|
Anmeldedatum: 19.07.07
|
|
|
|
Wohnort: Aachen
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2008, 15:12
Titel:
|
|
Hallo,
eine Möglichkeit, etwa 1/3 der Zeit zu sparen, ist die Funktion cutWord:
Du läufst durch das Array durch, und wenn eine Bedingung erfüllt ist, hängst Du das Wort an das Ende der Liste an.
Generell: erzeuge zunächst einen logischen Vector, z.B.
Dann laufe durch die Schleife und setze
Anschließend ist
das was Du suchst.
Hier allerdings geht es noch etwas besser (gar keine Schleife) mit Hilfe von cellfun:
Titus
|
|
|
Sillicoid |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 13.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 14.04.2008, 16:42
Titel:
|
|
Yay, vielen Dank.
Durch den cellfun Befehl bei der Verkürzung der Wortliste konnte ich die Zeit schon auf 7 Sekunden pro Zahl reduzieren.
Jetzt werde ich mal schauen wo ich noch weitere Schleifen-Geschichten durch cellfun-Befehle ersetzen kann.
Mfg
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|