routing - How does the "Random Walk" algorithm work? -
the algorithm below written in pseudocode , simplicity storage of actual route in data structure not included.
lengthfromsrc = 0; lengthfromdest = 0; totalnumberhops = 0; x = src; /*last node visited random walk starting @ src;*/ y = dest; /*last node visited random walk starting @ dest;*/ /* randomly select route length */ { length = rand( ) % max; while( length < min ); while( totalnumberhops < length ) { next = toss coin pick random walk src or dest; if( next == randwalkfromsrc ) { z = randomly select adjacent node x; totalnumberhops = 1 + lengthfromsrc + lengthfromdest + shortest-path z y; if( totalnumberhops > length ) break; x = z; /*include node in route*/ store x in route data structure lengthfromsrc++; } else { /* next = randwalkfromdest */ z = randomly select adjacent node y; totalnumberhops = 1 + lengthfromsrc + lengthfromdest + shortest-path z x; if( totalnumberhops > length ) break; y = z; store y in route data structure lengthfromdest++; } }
would give me brief analysis of algorithm/or walk me through code, understand better? main problem understanding first part:
{ length = rand( ) % max; while( length < min ); while( totalnumberhops < length )
ps: source http://www.onion-router.net/archives/route/
i'd code missing }
(although pseudo-code, goes really)
do { length = rand() % max; } while( length < min );
rand()
a function c++ generates integer between 0 , @ least 32767 (although, purposes of this, think should assume maximum number can generated greater max
).
% max
gives remaining of number divided max
, length
between 0
, max-1
(inclusive).
then repeat until length >= min
, so, @ end, length
between min
, max-1
(inclusive).
we can avoid loop code:
length = min + rand() % (max - min);
or, since pseudo-code:
length = random number in range [min, max)
the rest of code generates 2 paths @ same time source , destination, , stops when linking them (using shortest possible path) result in walk longer length
.
Comments
Post a Comment