WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Subgraph BFS

 

Alpha23
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 11.09.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 15:26     Titel: Subgraph BFS
  Antworten mit Zitat      
Hallo!

Ich arbeite zur Zeit an einem Algorithmus, der u.A. sehr oft eine Graphensuche aufrufen muss. Eingelesen wird eine Adjazenzmatrix (logical, sparse) und ein Anfangsknoten, herauskommen soll der Untergraph, der von dem Knoten aus erreichbar ist.
Momentan sieht das Programm so aus:
Code:
function [Adj_out,total,d]=GraphSearch(Adj_in,current)

r=length(Adj_in);
Adj_out=logical(sparse(r,r));
total=current;
d=true; % path indicator

if any(find((Adj_in(current,:)))) % gehe nur in die Schleife, wenn überhaupt ein Knoten erreichbar ist
    while ~isempty(current) % so lange es Randknoten in der Liste gibt
        [a,b]=find(Adj_in(current,:));
        if length(a)>1 % hat ein Knoten mehr als einen Nachfolger, ist der resultierende Subgraph kein Pfad
            d=false;
        end
        if any(a) % wenn es Nachfolger von Randknoten gibt
            for i=1:length(a)
                Adj_out(current(a(i)),b(i))=1; % Kante eintragen
            end
            current=setdiff(b,total); % Randknoten anpassen
            total=union(total,b); % Liste der erreichbaren Knoten erweitern
        else
            current=[]; % gibts keine Nachfolger, bricht der Algorithmus ab
        end
    end
else
    return
end

Problem dabei ist, dass teilweise Subgraphen von 50.000x50.000-Matrizen ausgegeben werden müssen und der Aufruf
Code:
[a,b]=find(Adj_in(current,:));

extrem viel Zeit beansprucht, da die Variable current ja immer größer wird. Wenn ich das Suchen von Nachfolgern in eine Schleife packe, dauert es noch länger. Wie kann ich den Algorithmus beschleunigen?

Vielen Dank für eure Antworten!

Gruß Timo
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.