Создание случайного упорядоченного списка из упорядоченного списка
У меня есть приложение, которое принимает результаты качества для производственного процесса и
создает графики как для отображения диаграмм Парето, так и для показа производительности.
Чтобы автоматизировать задачу тестирования этих статистических процедур, я хотел бы детерминистически иметь возможность добавлять записи в базу данных и предлагать качественные технологии на определенные графики и сравнивать с известным хорошим графиком. Но я также хотел бы имитировать результаты, чтобы они вошли в базу данных, как если бы пользователь выполнял процесс тестирования.
Одна из моих идей - заполнить список с номером я good, j number bad1, k number bad 2 и т.д. А потом каким-то случайным образом сортировать список перед вставкой в базу данных.
Итак, мой вопрос, есть ли стандартный алгоритм, чтобы взять отсортированный список значений и создать отсортированный в случайном порядке список?
Ответы
Ответ 1
Вы хотите использовать алгоритм shuffle. Обязательно используйте правильный алгоритм перетасовки, а не домашний, потому что он может ввести некоторую форму тонкого шаблона для данных. См. этот пост Джеффа Этвуда о проблеме с использованием случайных шуток.
Ответ 2
Есть несколько готовых реализаций, доступных как http://msdn.microsoft.com/en-us/library/bb385047.aspx и http://java.sun.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)
Ответ 3
У нашего хозяина есть очень хорошая статья о перетасовке карты, я считаю, что некоторые хорошие идеи могут быть приняты
http://www.codinghorror.com/blog/archives/001008.html
Ответ 4
Зависит от того, что вам нужно для "случайности". Самый простой способ, вероятно, состоит в том, чтобы через все элементы войти в хэш-набор и перебрать результат. Приказ, который вы получите, будет детерминированным, но для большинства целей и целей можно считать случайным. Кроме того, вы можете генерировать случайные числа между [0..length] списка, выбирая элементы и перетаскивая их в новый список. Предполагая, что удаление списка является постоянным временем, результатом будет случайный список, сгенерированный с эффективностью O (n).
Ответ 5
Random rnd = new Random();
List<int> orderedList = new List<int>();
List<int> randomList = new List<int>();
while (orderedList.Count != 0)
{
int index = rnd.Next(0, orderedList.Count);
randomList.Add(orderedList[index]);
orderedList.RemoveAt(index);
}
Ответ 6
Простой ответ заключается в том, чтобы иметь массив или вектор, цикл через него и для каждой посещенной позиции, произвольно выбирать элемент из оставшейся части списка и обменивать его с текущим элементом.
Для этого вам нужен разумный генератор случайных чисел.
Ответ 7
способ, которым я использовал это, состоял в том, чтобы иметь цикл, который выполнялся несколько раз, чтобы генерировать два случайных числа между 0 и длиной списка, а затем заменять эти два элемента.