I guess you need to have your demonstration code take a step back so that it is closer to the actual hashing problem in order for you to be able to use it to demonstrate the value of my suggestion. For example:
my $p = 17; for my $hash ( 0 .. 20 ) { my $i = 1 + $hash % ($p-1); my $j = $i; printf "%2u: %2u %s\n", $hash, $i, join ' ', map { sprintf "%2u", +$j = ( $j + $i ) % $p } 0 .. 16; } __END__ hash 1st 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 1 1: 2 4 6 8 10 12 14 16 1 3 5 7 9 11 13 15 0 2 2: 3 6 9 12 15 1 4 7 10 13 16 2 5 8 11 14 0 3 3: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 0 4 4: 5 10 15 3 8 13 1 6 11 16 4 9 14 2 7 12 0 5 5: 6 12 1 7 13 2 8 14 3 9 15 4 10 16 5 11 0 6 6: 7 14 4 11 1 8 15 5 12 2 9 16 6 13 3 10 0 7 7: 8 16 7 15 6 14 5 13 4 12 3 11 2 10 1 9 0 8 8: 9 1 10 2 11 3 12 4 13 5 14 6 15 7 16 8 0 9 9: 10 3 13 6 16 9 2 12 5 15 8 1 11 4 14 7 0 10 10: 11 5 16 10 4 15 9 3 14 8 2 13 7 1 12 6 0 11 11: 12 7 2 14 9 4 16 11 6 1 13 8 3 15 10 5 0 12 12: 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4 0 13 13: 14 11 8 5 2 16 13 10 7 4 1 15 12 9 6 3 0 14 14: 15 13 11 9 7 5 3 1 16 14 12 10 8 6 4 2 0 15 15: 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 16 16: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 1 17: 2 4 6 8 10 12 14 16 1 3 5 7 9 11 13 15 0 2 18: 3 6 9 12 15 1 4 7 10 13 16 2 5 8 11 14 0 3 19: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 0 4 20: 5 10 15 3 8 13 1 6 11 16 4 9 14 2 7 12 0 5
An interesting side-effect is that slot 0 is now always the last slot to be filled (I believe).
- tye
In reply to Re^5: RFC: Is there a solution to the flaw in my hash mechanism? (p-1?)
by tye
in thread RFC: Is there a solution to the flaw in my hash mechanism? (And are there any others?)
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |