hi leute,
ich versuch gerade folgende methode zu beschleunigen:
private static HashMap<Integer,Double[]> p(HashMap<Integer,Double[]> map, Integer stationID, int t, int T)
{
if(T==t+1)
return map;
NodeDataIterator graph = new NodeDataIterator();
graph.selectStation(stationID);
ArrayList<NodeData> nachfolger = graph.getNexts();
for(int n=0;n<nachfolger.size();n++)//alle in der naechsten zeiteinheit zu erreichende
{
if(map.containsKey(nachfolger.get(n).id))
{
Double[] d = map.get(nachfolger.get(n).id);
if(Controller.edgesWK.containsKey(String.valueOf(StochastischeMatrix.kombi(stationID, nachfolger.get(n).id))) &&
Controller.edgesWK.get(String.valueOf(StochastischeMatrix.kombi(stationID,stationID))).zahl[1]!=0)
{
d[t] = Controller.edgesWK.get(String.valueOf(StochastischeMatrix.kombi(stationID, nachfolger.get(n).id))).zahl[0]
/Controller.edgesWK.get(String.valueOf(StochastischeMatrix.kombi(stationID, stationID))).zahl[1]; //nachfolger.get(n).id
}
else d[t] = 0.0;
map.put(nachfolger.get(n).id, d);
if(d[t]!=0){
t = t + 1;
return p(map,nachfolger.get(n).id,t,T);
}
}
else
{
Double[] d = new Double[T];
for(int i=0; i<T; i++)
{//initialisieren
d[i] = 0.0;
}
if(Controller.edgesWK.containsKey(String.valueOf(StochastischeMatrix.kombi(stationID, nachfolger.get(n).id))) &&
Controller.edgesWK.get(String.valueOf(StochastischeMatrix.kombi(stationID, stationID))).zahl[1]!=0)
{
d[t] = Controller.edgesWK.get(String.valueOf(StochastischeMatrix.kombi(stationID, nachfolger.get(n).id))).zahl[0]
/Controller.edgesWK.get(String.valueOf(StochastischeMatrix.kombi(stationID, stationID))).zahl[1];
}
else d[t] = 0.0;
map.put(nachfolger.get(n).id, d);
if(d[t]!=0){
t = t + 1;
return p(map,nachfolger.get(n).id,t,T);
}
}
}
return map;
}
der code soll folgendes tun:
wir haben einen graphen, dessen Knoten Integer sind (ID's), wir starten zum zeitpunkt t=0 am knoten stationID und speichern in map alle Nodes die wir erreichen können, sowie die dazugehörigen kantengewichte aus Controller.edesWK.
Input:
1. HashMap<Integer,Double[]> map
Die integer sind nodeID's und das Double Array enthält die kantengewichte. erreichen wir einen node erst nach t schritten, so speichern wir das kanten gewicht als map.get(nodeID)[t]=gewicht.
2. stationID
das ist die ID von der aus wir im graphen starten.
3. t
ist der aktuelle zeitpunkt
4. T
ist der letzte zeitpunkt den wir betrachten wollen.
Output:
gefüllte map
erkennt ihr irgendwelche laufzeitsünden? eigendlich müsste das in O(T+nachfolger.size()) = O(nachfolger.size()) laufen, verbraucht trotzdem aber ordentlich laufzeit (T ist kleiner als 60)