slightly scramble list randomly

I want to take a list of size N that starts in ascending order and "slightly randomly scramble it"--- each element is moved within M steps of its original position (there can be some tolerance for slightly over M). The application is a backtracking algorithm that produces random solutions but tends to favor certain choices--at each node of the search tree I can evaluate the goodness of each possible next step, but I don't want the algorithm to always take the best choice. Just roughly, much of the time. Dennis

One approach you might consider is randomly generating a sequence of N*M or so swaps (i.e. generate an index i between 0 and (N-2), and swap the elements at positions i and i+1). Of course, this way it is possible to end up with an element very far away from its original position, but with only a very small probability. "On average" I would expect things to end up just moved around a bit like you want. -Brent On Sat, Oct 22, 2011 at 10:50:29AM -0700, Dennis Raddle wrote:
I want to take a list of size N that starts in ascending order and "slightly randomly scramble it"--- each element is moved within M steps of its original position (there can be some tolerance for slightly over M).
The application is a backtracking algorithm that produces random solutions but tends to favor certain choices--at each node of the search tree I can evaluate the goodness of each possible next step, but I don't want the algorithm to always take the best choice. Just roughly, much of the time.
Dennis
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
Brent Yorgey
-
Dennis Raddle