2016-09-27 2 views
0

Ich habe N Anzahl der Knoten an Start und Ende, wo sie als N Anzahl der Sätze (1 to 1, .., n to n, .., N to N) gepaart werden können. Ich habe jedoch M Stufen (kann als parallele Stufen angenommen werden) zwischen dem Start und Ende, und jede Stufe hat R Anzahl der Knoten, wo R>=N.Finden Sie alle möglichen Pfade zwischen N Knotensatz

Wenn ich anfangen betrachten n Knoten n Knoten (d.h. n to n pair) zu beenden, muss ich passieren (M+1) hops Endknoten zu erreichen, und es gibt R^M mögliche Pfade. Somit sind alle möglichen Pfade für alle Paare N*R^M.

gewichten jeden Link I als: die Verbindung zwischen Knoten in der Stufe im und Knoten j in Stufe m+1 als w_{i,j}^{m,m+1}.

Ich möchte einen MATLAB-Code schreiben, um alle möglichen Pfade jedes Paares zu erzeugen, d. H. N Paare. Kann mir bitte jemand helfen?

Ich versuchte es nur mit erschöpfende Suche nur für 2 Start-und Endknoten mit 2 Stufen, die 3 Knoten haben. Aber ich weiß nicht, wie man das für ein allgemeines Netzwerk mit einem effektiven Weg schreibt. Bitte hilf mir !!!

Hinzugefügt: Zum Beispiel: N = M = 2, R = 3 Ich habe R^M=2^3=9 mögliche Pfade für jedes Paar. Für beide Paare habe ich 18. Für 1 to 1 Paar eingestellt mögliche Pfade ist:

{1-1-1-1, 1-1-2-1,1-1-3-1 
1-2-1-1, 1-2-2-1,1-2-3-1 
1-3-1-1, 1-3-2-1,1-3-3-1} 

und die entsprechenden Gewichte eingestellt ist (0 bedeutet Start):

{w_{1,1}^{0,1}-w_{1,1}^{1,2}-w_{1,1}^{2,3}; w_{1,1}^{0,1}-w_{1,2}^{1,2}-w_{2,1}^{2,3}; w_{1,1}^{0,1}-w_{1,3}^{1,2}-w_{3,1}^{2,3}, ........., w_{1,3}^{0,1}-w_{3,3}^{1,2}-w_{3,1}^{2,3}} 

Same folgt für das 2 to 2 Paar.

Eigentlich meine ausführliche Suche erzeuge ich jeden Sprung als Matrix mit zufällig erzeugten Gewichten. Vom Anfang bis zum ersten Hop: A=rand(2,3), dann 1. Hop bis 2. Hop: B=rand(3,3), und 2. beenden: C=rand(3,2)

+0

Es ist mir nicht wirklich klar, was genau das Szenario ist. Sie erwähnen hier einige Kantengewichte, aber sie scheinen mit dem Problem der Aufzählung von Pfaden nichts zu tun zu haben. Auch die Auswahl der Anfangs- und Endknoten scheint keine Rolle zu spielen, da Sie keine Einschränkungen angeben, mit welchen Knoten Sie verbunden werden können. Könnten Sie vielleicht die gewünschte Ausgabe für sagen, N = M = 2, R = 3? –

+0

Danke @Daniel McLaury, ich möchte sowohl 1) die möglichen Wege und 2) entsprechende Gewichte schreiben. Sie haben recht, dass genug, um ein Set zu wissen, aber ich mache mir Sorgen über das entsprechende Gewicht auch gesetzt. Wie Sie kommentieren, aktualisiere ich die Probleme mit Beispiel N = M = 2, R = 3. – Frey

+0

Vielleicht kann Ihnen das helfen - http: // stackoverflow.com/questions/9535819/find-all-paths-zwischen-zwei-graph-nodes – StefanM

Antwort

0

Okay, also pro Ihr Update nur Sie das kartesische Produkt

{i} X erstellt werden soll { 1, 2, ..., R}^MX {j}

A quick-and-dirty Ansatz wäre, so etwas zu tun:

paths = zeros(R^M, M + 2); # initialize array 
paths(:, 1) = i;    # start all paths at node i 
paths(:, M+2) = j;   # end all paths at node j 

for c = 1:M 
    for r = 1:(R^M) 
    paths(r, c+1) = mod(idivide(r-1, R^(c-1)), R)+1 ; 
    end 
end 

Sie könnten dann die Schleife durch paths und berechnen die Gewichte.

+0

Ich habe nicht die Bedeutung von '{i} X {1, 2, ..., R}^MX {j}' und '**'. – Frey

+0

Ich habe wirklich nicht verstanden, wie das funktioniert ... – Frey

+0

Nun, sieh dir an, wie du die Pfade aufgezählt hast. In der ersten Spalte wollen wir das Muster 1-2-3-1-2-3-1-2-3 -..., in der zweiten Spalte wollen wir das Muster 1-1-1-2-2-2- 3-3-3-1-1-1 -... und so weiter. Also werden die Dinge, die wir produzieren werden, im Grunde die ternären (oder allgemeiner die Basis-R) -Erweiterungen der Zahlen von 1 bis R^M sein, modulo, dass wir 3 statt 0's wollen. Also können wir einfach eine Schleife schreiben und diese extrahieren. –

Verwandte Themen