- #1
tcma
- 1
- 0
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.
= an integer in the range of [1, 2, 3, ..., 50]
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.
Code:
Adjacent difference = absolute value of the difference between two adjacent integers
= |i - i | where j = 0 to 49
| j - j+1|
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.
Last edited: