Лабораторная работа № Задачи линейного программирования. Математическая модель задачи, экономический анализ. Поиск в ширину



Download 114,19 Kb.
bet9/13
Sana23.04.2022
Hajmi114,19 Kb.
#578049
TuriЛабораторная работа
1   ...   5   6   7   8   9   10   11   12   13
Bog'liq
Лабораторная работа № 7-12

Решение подзадач. К каждому из двух полученных массивов рекурсивно применяется та же самая процедура. Поскольку все значения элементов первого массива меньше значений во втором массиве, исходный массив будет отсортирован правильно. В процессе последовательного разделения задача постепенно сведется к сортировке подмассивов, содержащих не более двух элементов, которая решается тривиально.
Объединение результатов. В данном алгоритме подзадачи (т.е сортировка подмассивов) решаются «на месте», поэтому никаких специальных действий для объединения результатов не потребуется.

Существенным вопросом в этом алгоритме является выбор опорного элемента M. Нетрудно видеть, что наиболее эффективной стратегией был бы выбор медианного элемента массива, что обеспечивало бы разделение массива на две примерно равные части. Однако, определение медианного элемента повлекло бы дополнительные вычислительные затраты, поэтому чаще всего в качестве опорного выбирают элемент, расположенный посередине массива.




Рис. 1. Процедура разделения.

void quickSort( double * A, int first, int last )


{
int i = first, j = last;

// Выбираем "опорный" элемент


double med = A[ (first + last) / 2 ];
// Разбиваем массив на 2 части относительно
// "опорного" элемента
do
{
while ( A[i] < med )
i++;

while ( A[j] > med )


j--;
if ( i <= j )
{
double tmp = A[i];
A[i] = A[j];
A[j] = tmp;

i++;
j--;
}
}
while ( i <= j );
// Рекурсивно применяем ту жу процедуру к
// обеим частям массива
if ( i < last )
quickSort( A, i, last );

if ( first < j )


quickSort( A, first, j );
}

Несмотря на все положительные качества быстрой сортировки, базовый вариант алгоритма обладает недостатком: сортировка становится крайне неэффективной на некоторых часто встречающихся на практике типах входных данных. Например, если она применяется для сортировки уже отсортированной последовательности из N элементов, то все операции разделения вырождаются, и алгоритм рекурсивно вызовет сам себя N раз, перемещая за каждый вызов всего лишь один элемент. В этом, худшем, случае нетрудно оценить требуемое количество операций сравнения: N + (N-1) + …+ 2 + 1 = (N+1)N/2, что приводит к асимптотической оценке количества сравнений в худшем случае в O(N2).


В наиболее благоприятном случае, на каждой стадии разбиения последовательность делится на равные части. Это приводит к тому, что количество операций сравнения удовлетворяет рекуррентному соотношению:
CN = 2CN/2 + N.
Можно доказать, что решением этого соотношения будет CN ≈ N logN. Асимптотическая оценка среднего случая приводит к аналогичной величине.
Большая глубина рекурсивных вызовов может быть серьезной проблемой при использовании быстрой сортировки для очень длинных последовательностей. При использовании базового варианта алгоритма, даже короткие участки последовательности будут сортироваться по тому же принципу, при этом, количество вызовов алгоритма для коротких блоков на самых «глубоких» уровнях рекурсии будет очень велико. Сократить расходы на рекурсивный вызов алгоритма для коротких блоков можно простым способом – ввести ограничение на минимальный размер блока, для которого вместо алгоритма быстрой сортировки будет вызван другой, нерекурсивный, метод сортировки, например, сортировка вставками. Определение фактического значения этого порогового значения можно путем анализа скорости работы алгоритма на ожидаемых на практике последовательностях.
Ещё одно из возможных усовершенствований алгоритма быстрой сортировки заключается в использовании такого опорного элемента, который с большой вероятностью приводил к разделению последовательности на примерно равные части. Наиболее безопасный выбор, минимизирующий вероятность возникновения наихудшего случая, обеспечивается использованием в качестве разделяющего случайного элемента массива. Такой метод представляет собой пример вероятностного алгоритма, когда используется случайный характер величин для достижения высокой эффективности с большой вероятностью, независимо от степени упорядоченности входных данных.
Другой часто используемый способ нахождения подходящего разделяющего элемента заключается в том, что производится выборка трёх элементов из последовательности, а затем в качестве разделяющего используется медиана из этих трех элементов. Такой выбор основывается на том, что в среднем, медиана из трех элементов даст грубую оценку медианы всей последовательности.
Ещё один особый случай, в котором быстрая сортировка неэффективна – последовательность, содержащая большое количество (в предельном случае – все) дублирующихся элементов. В таком случае в качестве усовершенствования можно предложить разбивать последовательность не на две, а на три части: первая – для элементов меньших опорного, вторая – для элементов, равных ему, третья – для элементов, больших опорного. Однако, выполнение такого разделения реализуется гораздо сложнее.
Быстрая сортировка нашла широкое применение в связи с тем, что она эффективно работает в большинстве случаев. Другие методы работают лучше только в некоторых особых ситуациях, время от времени встречающихся на практике.

Download 114,19 Kb.

Do'stlaringiz bilan baham:
1   ...   5   6   7   8   9   10   11   12   13




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish