Be yourself
Если возможно, то к утру понедельника хотелось бы наконец разобраться с алгоритмом вот к этому заданию:
1. С помощью датчика псевдослучайных чисел построить последовательность чисел {xi} мощности N (пусть N=2560)
2. Упорядочить по возрастанию последовательность {xi} методом «пузырька» и подсчитать количество выполненных транспозиций t(N).
3. Разбить последовательность {xi} на две равные части:{xi}1 и {xi}2 и повторить шаг 2 для каждой последовательности {xi}1 и {xi}2, подсчитав t1(N/2) и t2(N/2). Выбрать и запомнить max[t1(N/2),t2(N/2)].
4. Сравнить «старший» элемент упорядоченной последовательности {xi}1 с «младшим» элементом последовательности {xi}2 и при необходимости выполнить транспозицию между ними.
5. Упорядочить модифицированные последовательности {xi}12 и {xi}21 и определить max[t12(N/2),t21(N/2)]. Запомнить сумму t(N1,N2)= max[t1(N/2),t2(N/2)]+ max[t12(N/2),t21(N/2)].
6. Шаги 4 и 5 повторять до тех пор, пока транспозиций между старшим элементом одной последовательности и младшим элементом другой больше не потребуется.
7. Шаги 3–6 повторить для k=4, 8, 16, ..., 64), где k – коэффициент распараллеливания алгоритма сортировки данных.
Всё вроде ясно, а вот как сложить кучку циклов вместе... (чтобы основной цикл начинался чем-то вроде for(rasp=1;rasp<65;rasp=rasp*2), а не приходилось запускать программу заново для каждого значения коэффициента распараллеливания, +консольный вывод тех самых максимальных количеств транспозиций)
Желательно выполнить на С#, но в крайнем случае попытаюсь переделать с С++.
1. С помощью датчика псевдослучайных чисел построить последовательность чисел {xi} мощности N (пусть N=2560)
2. Упорядочить по возрастанию последовательность {xi} методом «пузырька» и подсчитать количество выполненных транспозиций t(N).
3. Разбить последовательность {xi} на две равные части:{xi}1 и {xi}2 и повторить шаг 2 для каждой последовательности {xi}1 и {xi}2, подсчитав t1(N/2) и t2(N/2). Выбрать и запомнить max[t1(N/2),t2(N/2)].
4. Сравнить «старший» элемент упорядоченной последовательности {xi}1 с «младшим» элементом последовательности {xi}2 и при необходимости выполнить транспозицию между ними.
5. Упорядочить модифицированные последовательности {xi}12 и {xi}21 и определить max[t12(N/2),t21(N/2)]. Запомнить сумму t(N1,N2)= max[t1(N/2),t2(N/2)]+ max[t12(N/2),t21(N/2)].
6. Шаги 4 и 5 повторять до тех пор, пока транспозиций между старшим элементом одной последовательности и младшим элементом другой больше не потребуется.
7. Шаги 3–6 повторить для k=4, 8, 16, ..., 64), где k – коэффициент распараллеливания алгоритма сортировки данных.
Всё вроде ясно, а вот как сложить кучку циклов вместе... (чтобы основной цикл начинался чем-то вроде for(rasp=1;rasp<65;rasp=rasp*2), а не приходилось запускать программу заново для каждого значения коэффициента распараллеливания, +консольный вывод тех самых максимальных количеств транспозиций)
Желательно выполнить на С#, но в крайнем случае попытаюсь переделать с С++.