У меня была эта проблема некоторое время, я все еще пытался найти решение.
Каков наилучший из возможных способов равномерного распределения элементов в списке с низким расхождением?
Скажем, у нас есть список или элементы в массиве:
Red, Red, Red, Red, Red, Blue, Blue, Blue, Green, Green, Green, Yellow
Таким образом, в идеале вывод должен выглядеть примерно так:
Red, Blue, Red, Green, Red, Yellow, Blue, Red, Green, Red, Blue, Green.
Где каждый экземпляр находится "как можно дальше" от другого экземпляра самого себя ...
Когда я впервые попытался попробоватьЧтобы решить эту проблему, я должен признать, что я был наивен, поэтому я просто использовал некоторую форму случайного числа, чтобы перемешать список, но это приводит к скоплению экземпляров.
Предложение было начато с элемента с самой высокой частотой, поэтому красный будет помещен в позицию n * 12/5 для n от 0 до 4 включительно.
Затем поместите следующий наиболее повторяющийсяэлемент (синий) в положениях n * 12/3 + 1 для n от 0 до 2 включительно.Если что-то там уже размещено, просто поместите это в следующее пустое место.и т. д. и т. д. Однако, если записать это на бумаге, это не работает при всех обстоятельствах,
Скажем, список только
Red, Red, Red, Red, Red, Blue
Это не удастся.Там, где любой вариант имеет три смежных цвета одного цвета
Red, Red, Blue, Red, Red, Red
Red, Red, Red, Blue, Red, Red
Поэтому, пожалуйста, любые идеи или реализации, как это сделать, были бы замечательными.
Если это имеет значение, я работаю над целью-c, но сейчас все, что меня волнует, - это методология, как это сделать.