Файл: Зубов В.С. Математическое обеспечение цифровых вычислительных машин и систем учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.07.2024

Просмотров: 82

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

-Ю 9 -

в) Оператор "Цепной список - описок типа А"

procedu re

I Z M 3 ( гг)

записей:( Z )

цепной описок:(А1) его

фиксатор: ( / я / ) ;

 

in te g e r

n .'- fn h

 

a r z a g

Z

;

'

Integer

a r ia у

Ah

 

A2 ;

 

integer J n2. i,/\ &

Begin

integer

azzag

 

J ,

: = / / ? / ;

J o z

/ Ы I s te p

1 u n t ie

 

(/?-1 )

Vo_ S ep in

A 2 [A i[jll i - J ;

1'.= А 1ф e n d

построения^ встречного

цепного

списка А2

с фиксатором fh Z 3 J-n2x=g

;

J

' - f a t »

 

 

/от / r : = i

step

1 unii t

п do

Begin

 

геаВ г ;

г -.-ZiK7; Z[kb=Z[j]; Z [J]i-

г ; comment предыдущие 3

оператора реализуют обмен для установки J

- й записи i-a/f-ю

позицию формируемого списка

типа_А;

 

М:

i

:=

A i[ g l\

A

i [ j ] := A t [ к ]

;A 1[A 2 [ к ] ]

;

c o m m e n t

предыдущие

2

оператора отражают переключения в

исходном,

а следующие

2

оператора - во

встречном

списке,

отражающие изменение

позиции записи,

 

перешедшей с к на ^ /-ю

позицию;

 

А 2$]:=А 2[1<}, A 2[A 1[K U -=J

; J

: = i

;

c o m m e n t

продви­

жение по цепочке, см.также

оператор с меткой М;

e n d од­

ного

замещения

записей

e n d

i z М 3 -

 

 

 

 

 

 

 

г ) Оператор "Дихотомический описок -

односвязный цеп­

ной

список"

 

 

 

 

 

 

 

 

 

 

 

 

рweedиге IZMi{ П ) левых адресов или адресов связи одно-г связного: ( / J Z ) правые адреса:(АР); comment АР[о]~ фиксатор корня, а затем фиксатор начала одноовязного цепного списка;

integer

п ; integer a rra y

AL,

АР;

Begirt

Boolean

arza g

В [l\rij\

comment элемен­

ты массива АО представляют адреса

"обратной связи" в ди­

хотомическом списке;

integer

i

, J >к ; com m ent i -

текущий фиксатор последнего из элементов, включённых в од­

носвязный список к некоторому моменту; integer

arrop

АО[lift]; comment

массив В необходим для различения

элементов уже включённых в односвязный список от ещё не

включённых, следующий оператор приводит его к исходному

состоянию;

к°г i :=I

step I a n tiВ п do B[i}.= -faUse ;

J:=Q; comment это

означает, что отправной точкой служит

корень; MI; I %=/ ;

comment далее осуществляется переход

по

правому адресу

(вначале - от фжеатора к корню)

и если

он

не пуст,

то затем ври переходе по цепочке 'по индексу^)



-п о ■

используются лишь левые адреса до выявления пустого адреса;

ki=APrf]i

М k &

then

Bep in

Л\2-.A0[k} .= J

\ J * = k \

 

t £ A L lJli

0

th en ’ B e g in

к := A L fjh

$Q to

e/7<^

пере­

хода по цепочке левых;

М3\A L [i] \ - j

;

com m en t предыдущий

оператор включает очередной элемент в

односвязный

список,

а последующий фиксирует этот факт;

 

 

tr u e ;

9 °

to Ml

e n d перехода к

зайоминанлю места вынужденного

перехода

в цепочке по правому адресу, следующие 2 оператора реали­

зуют возврат по цепочке к первому попавшемуся элементу,

ещё не учтённому в

односвязном

 

списке;

Ш \ Ji~ A 0 jj]\

 

/£ BQ] the/,'

poto М4;

i£ AO[J,J Ф o then ро % №

e n d IZM4 при возврате

к фиксатору

 

 

 

 

 

 

 

2 .

Процедура простейших алгоритмов упорядочения

 

 

 

(в дополнение к § 2 гл. П)

 

 

 

 

 

 

a) p ro c e d u re

вставка ( Л )

записей:(-Z ) -.onauZ. ; integerп:

Begin

in te g e r

L

 

r e n t z ;

com m ent внешний цикл -

по включаемым записям,

вложенный цикл -

поиск места

вклю­

чения записи;

/ о г

/:=

2

ste p

I

u n tii

do

B ep in

 

-fo r j

;= i - 1

ste p

- I

u n tie

l

d o

i f z d l^ z itlth en

gotolk,

M: Z := Z C iJi

 

 

 

 

s te p

 

- I

u n tiB j

+ I

do

 

Z [к + I j:= 2 fk j ;

com m ent предшествующий

оператор осущест­

вляет'перемещение на одну позицию всех больших записей, а

последующий -

размещает новую запись на освобождённую тем

самым позицию,^ fj +l] := 7

e n d

включения очередной записи

e n d вставки

 

 

 

 

 

б) p ro c e d u re

пузырёк ( / ? )

записей: (Z ) ;

a r r a p Z ;

in te g e r п ;

co m m e n t

П -

асло записей;

 

B eg in in te g e r

L . J i

r e a d

z ; co m m e n t

во внешнем

цикле изменяется верхняя граница зоны, где устраняются ин­

версии, ибо за один её просмотр экстремальная

запись з о н ы

занимает заведомо окончательное положение;

 

f o e j := n ste p - I u n t ie 2 <fo B egin 7 \=ZCG\

com m ent

данный оператор и оператор с меткой М снимают копию запи­ си на случай, если её позицию займёт следующая запись

(случай их инверсии), идущий за комментарием оператор смещает все последовательно расположенные записи, инверс-


- / / / -

ные о копируемо’*, которую он помещает после них;

/0 7 Л = 2 s te p I и п Ш J do i£ z [ i] = s 7 /h en z /i-/k =Z fk

e£se

Begin

 

:= Z ;

M: Z : = Z [ i ]

e n d перехода к новой

 

"всплывающей"

записи; 2 [jj:~ Z ;

com m ent установка на

 

окончательное

место

экстремальной

записи;

e n d просмотра

 

зоны

e n d

пуэырька

 

 

 

 

 

 

 

 

 

 

3 .

 

Оператора оптимального

объединения внутренне

упо­

рядоченных сегментов (а )

и разделения на взаимно упорядо­

ченные

сегменты (б )(в дополнение к

§ 3 гл.П )

 

 

 

а)

ргосес/ап е

m ezp e (Z3)

число:in ?)

записей b : ( z 2 )

число:(/*?)

записей в : ( 2 У ) : in te p e z т ,

П ; a z z a j/Zf.Z2,Z3}

com m en t 2 3 - результирующий сегмент;

 

 

 

 

B egin

in te o e z

i tp

 

 

 

i ;

J o i^ k \= i

s t e p

i

u n t i t n V m d o в е р in

I / i> n / h en n o to d :

 

 

a / J > m

‘th en

p o to M : com m ent эти условные операторы

 

необходимы для обхода следующего оператора сопоставления

 

записей, если

один из

сегментов 21 t2 2 исчерпался;

 

 

i £ z i [ i ] < Z 2 [ p J th en

м '.Begin

Z 3 [k ]\= z -i[i] ; /: =

£+ le n d

выталкивания магазина Z i

e £ se

d :

Bep/n

Z 3 [t]\=

Z2fy'J\

 

 

^ n d выталкивания магазина Z 2 e n d включения оче­

редной'записи

в магазин 2 3 e n d т е ? р е

 

 

 

 

 

б) p z o c e d u z e so z /d iB B a id (Z )

нижняя грань; (<7) верх­

няя грань:{ & ) ; L n /e o e z

а . в :

a z z a t/Z

; с о т т е л / Z

-

разделяемый сегмент записей;

 

 

 

 

 

 

Bepin _ infeyeг

 

 

rent г: zW j^/W ; i^ Z fih

Шпл£2ф < 7 /hen Ведеп zftj:*ztf]\ oo£o Ж end:

com m en t предыдущий оператор включает запись из "верхнего^

магазинав

"нижний", если она инверсна с опорной 1 ;

М 2

: / : = / -

1 ; $ °

У

^he/г

M I

e£se М 5 ;

М3:

if_ Zfij>Z then

Be#in Z [j]\-Z C H :

g o to

М2 e n d :

com m ent предыдущий оператор включает запись из ’кяжяего"

магазина в "верхний" и переходит к рассмотрению записи в ' верхушке "верхнего” магазина;

М4 : L := i + I ; i£ 1 < J Ш п р о / о М3 ; M 5 :Z ^ 7 := 7 ; com m ent предыдущий оператор по окончании разделения раз­ мещает опорную запись между магазинами 2 [ i ] и 2 {J]‘t e n d раз­ деления, граница разделения фиксируется I , подробно® из­ ложение алгоритма см, в [Q j


 

 

 

 

- т -

 

 

 

4 .

Примеры алгоритмов отобразительного упорядочения

 

 

(в дополнение к § 4 гл П)

 

 

 

а) Упорядочение неповторяющихся кодов через отображе­

ние на двоичный вектор В.

(ft) записей: (Z. ) разрядность

procedure

S it so rt

их ключей: (A ’ ) ;

integer arrapZ',integernfo Sepln Boolean

cnraigBBPtkbintepeZi ,J - ; fo r / : = I step 1 u n til

2f кdo

-false j

comment

элементы вектора В со значением

tr u e

будут

соответствовать

значениям,

вотретивишмся в Z. ;

jo 7 I ;= I

stepi

until /7

do_

true ;

comment

выполнена регистрация всех

значений ключей в Z

; J

г= I ;

for L

. 1

step

I

u n til 2rk do j£_ BiOthen

Sepin'

2 ф х ~

L\ j

 

I

d ftd этим

оператором по вектору В в цик­

ле выполняется''воспроизведение кодов Z

, но уже в упорядочен­

ном описке

типа

A e n d S i t SO T'S

 

 

 

б ) Упорядочение записей(в списке типа А) через отобра­ жение шс значений на вектор'счётчиков S .

p ro c e d u re

c o u n te rso rt

(П ) записей: ( Z ) разрядность

их ключей:( к ) ;

in te g e r

n . h i

I n te g e r

a r r a y

Z

;

com m ent значение

ключа

 

будет использоваться как номер

счётчика в векторе S ;

 

 

 

 

 

 

 

 

B enin

 

I n t e g e r

i , J j

in t e g e r

a r r a y

[ u z f k } ,

B o o le a n

 

a r ? a g

C l-.dh

fo r i ?=/

ste p

I u n t i l 2 tk cb_

Sfi]i=

Qi

to r

i:= i

s te p i

u n t i l a

do

8

t r u e

:

com m ent эти

оператора

приводят к исходному Виду вектор S

и в е к то р ^ ,

в котором будет

регистрироваться факт

окончате­

льного установления записи на позицию списка типа А;

 

fo r / ; = I

s te p i

u n t i l п do s r e f i j j i = . $ [ z [ i jj + i ;

com m ent этот

 

оператор

подсчитал чиоло

повторений каждого

значения ключа; J '.=pl+l; fo r

/•= 2fk ste p - I

u n t i l

I d o

Begin

S fiJ\= J : _ 7

- S / / 7

e n d замены элемента счётчика

номе­

ром начальной позиции для размещения в списке типа А запи­ сей с соответствующим значением ключа; следующий оператор

расстанавливает заш ои;

fo r С := I

s te p

I O n t il П

d o

i f BLil then fo ? J := S [ Z £ i j]

i&fo'lej t /

d p

B eg in

re ali ;

7 := ZC J]', Z lj}.= Z [i]\Z [H

:= 7 ;

com m ent

эти

3 оператора

осуществили обмен местами L

и у -й

записей,

следующий опе­

ратор регистрирует факт

окончательного положения записи на