Hm...: die laufzeit einer rekrusiven methode fixen

Beitrag lesen

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)