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

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

Более точно,

б. Слияние {II, f2) {f \ f s[06pa3{fl)[j 06pa3{f2)] X Образ{fl)\j Образ{f2) и Биект {f,[06pa3{fl)[i Образ {f 2)], Образ {fl)

и Образ if 2))

и Peгyляp{f, fl) и Peгyляp{f, f2)},

6. Peгyляp{f, fl)Yxl, х2 Образ {fl)-

{fl)-\xl)<{fl)-{x2) =f~{xl)<f-{x2).

Далее в разд. 6.4 мы увидим, откуда возникает это сужение Перест.

Чтобы получить Перест {Х1\}Х2), уже недостаточно рассматривать произвольные fl Перест{Х1), f2 Перест{Х2). Необходимо взять все такие и f2, т. е.

7. Перест{Х1\}Х2) U Слияние{11, f2)

fl тПерест(Х1) 2 Перест (XS)

Это уравнение, конечно, нуждается в обосновании, но мы дадим его (неформально) позже, когда поймем, откуда берется фильтр Регуляр.

Необходимо построить рекурсию для Слияния. Вначале обобщим (5), определив

8. Слияние! {fl, f2, N){f \f S N X Образ {fl) U Образ {f2)

и Биект {f, N, Образ {fl), Образ {f2))

и Регуляр {f, fl) и Регуляр if, f2)},

и тогда

9. Слияние {fl, f2)-Cлuянuel{fl, f2, [Образ {fl)\] Образ {f 2)])

Сворачивая 5.3.1(5) с 5,3.1(8) Слияние {fl, f2, [flUf2]).

Сначала синтезируем главную рекурсию для Слияния!.

10. Слияние! {{nlxl) + , {п2х2) + /2, /г + Л)

{/ I f S п + X Образ {{п!х!) + fl)

и Образ {{п2х2) + !2) и Биект {f, n+N, Образ {{nlxl) + fl)

иОбраз{{п2х2) + 12))

и Регуляр {f, {nlxl)fl)

и Регуляр (/, {п2х2) -f f2)} Конкретизация (8).



Продвижение фильтра в этом случае сложнее, так как у нас имеются два фильтра. Детали приведены в разд. 6.4; в итоге(10) можно переписать как

<= {{пх1) + fl\flNX Образ (fl) и Образ {{п2х2) + /2) и Биект ifl, N, Образ if 1)

[}0браз{{п2х2) + !2))

и РегулярЦ!, /) и РегулярЦ!, {п2, x2) + f2)} и {{пх2) + !2 IfrNX Образ{{nlxl) + ) U Образ {f2) и Биект {12, N, Образ ({п1 х1)-\-fl)

и Образ (12))

и РегулярЦГ, {nlxl) + fl)

и Регуляр{12,12)} <= {{пх1) + fl I G Слияние] {fl, {п2х2) + f2, N)} и {{пх2) + f2 If2 G Слияние] {(nlxl) + fl, f2, N)}

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

Теперь осталось рассмотреть лишь основные случаи для Слияния]. Из уравнения (9) заметим, что когда впервые вызывается Cлuянuel{fl, f2, N), то Card(N)= Card{fl)+Cardiff), и из уравнения (11) мы видим, что при каждом рекурсивном вызове удаляется один элемент из iV и один из fl или f2, так что это соотношение сохраняется. Поэтому нам необходимо изучить основные случаи:

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

13. Слияние] {{nlxl) + fl, Ф, п +N){f \f п + N X Образ {fl)

и Об раз {Ф) и Биект {f, N, Образ {fl) U Образ (Ф)) и Peгyляp{f, {nlx])-\-f]) и Peгyляp{f, Ф)} Конкретизация 5.3.1(8).

Аналогичный случай возникает с fl = Ф. Для этих случаев можно снова построить рекурсию, однако синтез настолько прост, что мы его опускаем. Получаем

14. Слияние] {{nlxl) + fl, Ф, n + N)

<= {{п, xl)-\-f\fc= Слияние] {fl, Ф, N)}

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

{{пх2) + /1 / е Слияние] (Ф, f2, N)}.

Два этих основных случая просто возвращают нас к исходному массиву, но сдвинутому так, чтобы он поместился в конце массивов, построенных главной рекурсией.



Так мы получаем алгоритм Р2

Р2 Перест {Ф) <={Ф} Перест {{х}) {{{1х))}

Перест {Х1\}Х2)<= [] Слияние {fl, f2)

и Перест (XI) Перест (Л2)

Слияние {fl, f2) Слияние! {fl, f2, [fl [] f2]) Слияние! (Ф, Ф, Ф) {Ф} Слияние! {{nlxl) + f!,Ф, n-N)

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

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

{{пх1) + I G Слияние! {fl, {п2х2)

+ f2, N)} и {{пх2) + f2 \f2 е Слияние! {{nlxl)

+ fl, f2, N)}. 5.3,2. Сортировка Слиянием из Р2. Снова определим

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

где Перест получено из Р2 и Упоряд в 5.2.2(2). Отсюда немедленно получаем

2. Сорт{Ф) *={Ф} Конкретизация (1) и развертка

3. Сорт{{х}) -{{Ix}} Конкретизация (1) и развертка

4. Сорт {XI []Х2)<= и Упоряд {Слияние {fl, f2))

П%п7р17тш) Конкретизация (1), развертка с использованием 5.3.1(7) и внесение Упоряд внутрь объединения.

Исследование фильтров (6.5) позволяет нам переписать это как и У по ряд {Слияние {fl, f2))

ft е Упоряд (Перест (XD) Упоряд (Перест (Х2П

Таким образом, мы имеем

5. Сорт {Xl[jX2)<= и Упоряд {Слияние {fl, f2))

[5g°J(fn Свертка с (1).

Рассмотрев Упоряд {Слияние {fl, f2)), видим, что это есть Упоряд {Слияние! {fl, f2, [fl[jf2])), поэтому определим

6. CлuянueC{fl, f2, N) Упоряд {Слияние! {fl, f2, N)), и перепишем (5) в виде

7. Сорт {XI иХ2)<= и СлияниеС {fl, f2, [fl [] f2])

liicZrlxi] Развертка (5) с 5.3.1(9),

свертка с (6).



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



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