Im just starting getting into Objective-C, i’m trying to sort an array so it is as low discrepancy as possible.
int main()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *myColors;
myColors = [NSMutableArray arrayWithObjects: @"Red", @"Red",@"Red", @"Red", @"Red", @"Green", @"Green", @"Green", @"Blue", @"Blue", @"Blue", @"Yellow", nil];
srandom(time(NULL));
NSUInteger count = [myColors count];
for (NSUInteger i = 0; i < count; ++i) {
int nElements = count - i;
int n = (random() % nElements) + i;
[myColors exchangeObjectAtIndex:i withObjectAtIndex:n];
NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]);
}
[pool drain]; return 0;
}
Which outputs something like
Element 0 = Blue
Element 1 = Green
Element 2 = Yellow
Element 3 = Blue
Element 4 = Green
Element 5 = Red
Element 6 = Red
Element 7 = Red
Element 8 = Blue
Element 9 = Green
Element 10 = Red
Element 11 = Red
Which shuffles the array, but it isn’t as low discrepancy as I would like due to random number.
Ideally each instance should be as far away from another one of it’s kind as possible like:
Red, Green, Red, Blue, Red, Green, Yellow, Red, Blue, Red, Green, Blue
Any help and suggestions would be greats, I’ve been going at this pretty much all day.
Okay, i’ve been sitting and trying to make an algorithme that shuffles an array. I think it does a decent job, but can probably be improved a lot. Its done quickly.
I calculate the frequency of each color, and use that for traversing the result array. For each object in the result i use the frequency to determine what color to add now. There are several if statements to do that.
This is the code:
The result of this is:
Hope that does it!