Fork me on GitHub
Math for the people, by the people.

User login

Pseudorandom integer sequence with at least 15 adjacent diff...

Primary tabs

Pseudorandom integer sequence with at least 15 adjacent diff...

The requirement is to find an pseudorandom integer sequence i0, i1, i2, i3, ... , i48, i49 so that there are at least 15 adjacent differences which are greater than 36.

Adjacent difference
= absolute value of the difference between two adjacent integers
= |i - i |
| j - j+1|
where j = 0 to 49 and
i = an integer in the range of [1, 2, 3, ..., 50]
j

e.g.
For this integer sequence (very poor in randomness)
1 39 2 40 3 41 4 42 5 43 6 44 7 45 8 46 9 47 10 48 11 49 12 50 13 26 14 27 15 28 16 29 17 30 18 31 19 32 20 33 21 34 22 35 23 36 24 37 25 38

i0 = 1
i1 = 39
i2 = 2
i3 = 40
i4 = 3
...
i47 = 37
i48 = 25
i49 = 38

Adjacent difference
|i0 - i1| = |1 - 39| = 38
|i1 - i2| = |39 - 2| = 37
|i2 - i3| = |2 - 40| = 38
|i3 - i4| = |40 - 3| = 37
...
|i23 - i24| = |50 - 13| = 37
|i24 - i25| = |13 - 26| = 13
...
|i46 - i47| = |24 - 37| = 13
|i47 - i48| = |37 - 25| = 12
|i48 - i49| = |25 - 38| = 13

There are 24 adjacent differences which are greater than 36.
Is there an algorithm to find an pseudorandom integer sequence which meet the requirement?
One algorithm I can think of is:
1. Create a not-random integer sequence which has at least 15 adjacent differences which are greater than 36.
e.g. the above integer sequence alternates between a small and large integer
2. Randomlly select two odd-indexed integer.
If swapping them still meet the requirement, then swap them
3. Randomlly select two even-indexed integer.
If swapping them still meet the requirement, then swap them
4. Repeat steps 2 and 3 many times

I will write a computer program to implement this.
Please comment or suggest a better algorithm.


I know it's kind of late to respond to this but here goes anyway. How about this. Lets say that m is nice to n if |m - n| > 36. So, in some random manner, pick an increasing sequence of indices 1 < k[1] < k[2] < ... < k[15] < 51. Then, for i = 1 to 50 do the following

If i is not one of the k's then let s[i] be a random integer
Otherwise randomly pick s[i] so that it is nice to s[i-1].

Would that work?

Subscribe to Comments for "Pseudorandom integer sequence with at least 15 adjacent diff..."