Android-приложение для поиска дешевых авиабилетов: play.google.com
Главная -> Теоретическое программирование

0 1 2 3 4 5 [6] 7 8 9 10 11

Немедленно получаем

8. СлияниеС {Ф, Ф, Ф)-{Ф} Конкретизация (6) и развертка

с использованием 5.3.1 (2) и 5.3.2 (2),

Теперь посмотрим на

9. СлияниеС {(nlxl) + , {п2х2) + /2, « + Л)

Упоряд {Слияние! {{nlxl) + fl, {п2х2) + + f2, n + N))

Конкретизация (6). Продвижение фильтров (6.6) приводит нас к

10. СлияниеС {{nlxl) + fl, {п2х2) -\-f2,n+ N)

{{nxl) 4- \fV e Слияние! {fl, {п2х2) + f2, N) и ynop{fl)} если xl < x2 {{nx2) + f2 \f2 e Слияние! {{nlxl +fl, f2, N) и Упор {f2)

иначе

{{nxl) + fl I e СлияниеС {fl, {п2х2) -(- f2, N)} если xl < x2 {{nx2) + f2 \f2 e СлияниеС {{nlxl) + f/, f2, Л/)} иначе

Свертка с 5.2.2(2) и (6).

Наконец нам остается рассмотреть другие основные случаи. Синтез рекурсий прост, и мы опускаем детали. Фактически, так как и (2 упорядочены, а Слияние! {fl,Ф,N), например, не переупорядочивает , можно продолжать использовать в этих случаях Слияние!, однако мы сочли более аккуратным написать

11. СлияниеС {{nlxl)+ f!, Ф,п + М)

<= {{пх!) + fllfl с= СлияниеС {fl, Ф, N)}

12. СлияниеС (Ф, {п2х2) + f2, n + N)

<= {{пх2) + f2 I f2 e СлияниеС <Ф, f2, N)}.

Так мы получаем алгоритм S3 {Сортировка Слиянием).

S3 Сорт {Ф){Ф} Сорт{{х}){{{!х)})

Сорт {Х1\]Х2) и СлияниеС {fl, f2[f!\]f2])

fleCopT(,Xn f2s= Сорт (X2)

СлияниеС (Ф, Ф, Ф) <= {Ф} СлияниеС {{nlxl) + , Ф, n + N)

{{пх1) +fl\flСлияниеС{fl, Ф, N)}



СлияниеС (Ф, {п2х2) + f2, п + N)

{{пх2) + 12 I f2 е СлияниеС (Ф, f2, N)} СлияниеС {{nlxl) + , {п2х2) + f2,n + N)

{{nxl) + fl\flG СлияниеС {fl, {п2х2) + /2, N)]

если xl < х2 {{пх2) + /2 i/2s СлияниеС {{nlxl) + , /2, Л)} иначе.

5.3.3. Сортировка Вставками из Р2. Если в алгоритме Р2 разбивать множество X не на XI [} Х2, а на л; + Z, то уравнение для главной рекурсии примет вид

1. Перест{х + Х)<= [j Слияние!{{{1х)}, f2, 1{{1х}}Цf2])

!2ев Перест (Х)

Конкретизация 5.3.1(11) и развертка с использованием 5.3.1(9).

Таким образом мы синтезируем Слияние!, получая новые уравнения

2. Слияние! {{{1х)}, Ф, п + Ф) {{{пх)}}

Развертка с использованием 5.3.1(14) и 5.3.1 (12)

3. Слияние! {{{1х)}, {п2х2) -f f2, /г + Щ

{{пх) + fl \fl е Слияние! (Ф, {п2х2) + f2, N)} и {{пх2) + /2 1/2 G Слияние! {{{1х)}, f2, N)}

Развертка с использованием 5.3.1(11).

Назовем этот модифицированный алгоритм перестановок Р2 и заметим, что уравнение 5.3.1(3) больше не требуется.

Р2 Перест {Ф) {Ф}

Перест {х + Х) U Слияние! {{{lx)},f,[{{lx)}Uf)]

fsnepeCT(X)

Слияние! (Ф, Ф, Ф) <= {Ф} Слияние! {{{1х)}, Ф, rt-f Ф)

<={{{пх)}} Слияние! (Ф, {п2х2) + f2,n + N)

<= {{пх2) -f / I / е Слияние! {Ф. f2, N)} Слияние! {{{1х)}, {п2х2) + f2,n + N)

{{пх) + f! \f! Слияние! (Ф, {п2х2)

+ /2, N)}

и {{nx2)+f2 \f2(Слияние! {{{!х)}, f2, N)}.

Чтобы получить Сортировку Вставками, как обычно, определим

4. Сорт {Х) Упоряд {Перест {X)),



где Перест теперь задаетсяР2. Мы ограничимся лишь наброском синтеза главной рекурсии; так, конкретизируя (4), получаем

5. Сорт{х-\-Х)<= и Упорчд{Слияние1{{{1х),!,[{{1х)}[}П))

f Перест(Х)

Развертка с использованием (1) и с внесением Упоряд внутрь объединения.

Как и в Сортировке Слиянием, можно произвести свертку с (4), потому что исследование фильтров позволяет переписать (5) как

6. Сорт {х-\-Х) и Упоряд {Слияние! {{{!х)}, f,

Упоряд {Перест {X))

[{{lx)}Uf]))

и Упоряд {Слияние! {{{!х)}, f, [{{!х)} U f ])

fsCopT(X)

Свертка с (4).

Теперь рассмотрим

7. СлияниеС {{Ох), IN) Упоряд {Слияние! {{Ох)), IN)) н, в частности,

8. СлияниеС {{{!х), {п2х2) + /2, « + N)

Упоряд(Слияние!{{{!х), {п2х2) + f2, п+ М)

. Продвижение фильтра (6.7) приводит нас к

9. СлияниеС {{{!х), (n2x2)-\-f2, n-\-N)

{{пх) + f Г I f! е Слияние! (Ф, {п2х2) + f2, N) и Упор{!!)} если X <.х2 {{пх2) +12 I !2 е Слияние! {{{!х)}, f2, N) и ynop{f2)} иначе

{{пх) + U I fl е СлияниеС (Ф), {п2х2) + f2, N)} если X <х2 {{пх2) + f2 1/2 е СлияниеС {{{!х)), f2, N)} иначе

Свертка с 5.2.2(2) и (7).

6 Зак. 1117



0 1 2 3 4 5 [6] 7 8 9 10 11



0.0079
Яндекс.Метрика