Citat:
Ursprungligen postat av
Eaglecoth
Men om vi har en bestämd storlek på grafen (sådär 45 noder), och maxvikten är 2. Då borde man ändå kunna hitta nått snabbt och smidigt va?
Med största säkerhet.
Som jag sa, kör du möt i mitten kommer du få en komplexitet
som maximalt är \sqrt{2^45}. Typ.
Lite spontant:
En sådan algoritm kan ju se ut något i stil med du kör bredden
först på ett djup L/2. Lägg in alla vägar och deras vikter i en
lista Q_1.
Sedan gör du samma från andra noden. Lägg i en lista Q_2.
Sortera Q_1 och Q_2. Du kan direkt ta bort alla värden på
vikten som är högre än 2.
Börja sedan att i = 0: läs första värdet i Q_1. Sätt en pekare j på
sista värdet i Q_2. Om deras summa är mindre än L, då
har du j-i=j st vägar. Öka sedan pekaren i Q_1. Om ovan fortfarande
gäller har du j-i=j-1 vägar till. Om inte minskar du j tills det gäller.
Du gör alltså max |Q_1|+|Q_2| operationer.
Det ger dig en algoritm som är ungefär 2*2^L/2, där i ditt fall L max
kan vara 45.
Hittade de här också [1][2]. Lite extramaterial.
[1]
http://cstheory.stackexchange.com/questions/20246/counting-the-number-of-simple-paths-in-undirected-graph
[2]
http://stackoverflow.com/questions/18351953/computing-numbers-of-simple-path-in-directed-graph-containing-cycles
Edit: nu antog jag att n log n ≈ n för små n