«Мәліметтерді өңдеудің құрылымдары мен алгоритмдері»



бет7/8
Дата05.06.2017
өлшемі1,51 Mb.
#18191
1   2   3   4   5   6   7   8

Инцидиенттік матрицасы дегеніміз – размері nm болатын матрица. Мұндағы n-төбелер саны, m-қабырғалар саны. Бағытталған граф үшін х,у қабырғаларына сәйкес келетін баған, у төбесіне сәйкес келетін жолда 1 болады. Ал х төбесіне сәйкес келетін жолда -1 болады, қалған жолдарда 0 болады. Тұзақ жағдайында басқа сан берілуі мүмкін. Яғни, хх болғанда 2 деген сан беріледі. Мысалы,
1 2 4 5


3 6


граф берілген, оның инцидиентті матрицасын жазамыз:
(1,2) (1,3) (3,2) (3,4) (5,4) (5,6) (6,5)

Бағытталған граф үшін х,у қабырғасына сәйкес келетін баған х,у төбесіне сәйкес келетін жолда 1 болады да, қалған жолдарда 0 болады.

2 4


1 6


    1. 5

(1,2)(1,3)(1,5)(2,3)(2,5)(3,4)(4,5)(4,6)(5,6)



Графты инцидиентті матрица арқылы беру үшін nМ элемент қажет болады және олардың көбі 0 болады. Инцидиентті матрица ЭЕМ-ға енгізу мен өңдеуге қиын. Сондай-ақ ол қабырғалар туралы тура ақпарат бермейді. Х,у қабырғасы бар ма деген сұраққа жауап беру үшін барлық бағандарды қарап шығу қажет.
Көршілестік матрицасы

Көршілестік матрицасы дегеніміз - өлшемі nМ болатын және егер i-ші төбесі j-ші төбесімен көршілес болса мәні бірге тең болатын, әйтпесе 0-ге тең болатын матрица.

Бағытталмаған графтар үшін х, у қабырғасы у,х қабырғасына тең болады. Сондықтан олар үшін көршілестік матрицасы әрқашан симметриялы. Оларда алдыңғы граф үшін матрица мынадай:

1 2 4 5

3 6


Бағытталмаған граф үшін көршілестік матрица:

2 4


1 6

5

3 5



Көршілес матрица симметриялы болып табылады, сондықтан ЭЕМ-ға енгізіп, өңдеуге қолайлы.

Тапсырмалар: Инцидиенттік матрицасы, көршілестік матрицасы, салмақтық матрицасы, қабырғалар тізімі, көршілестік тізімі әдістерінің кез-келген біреуін қолдана отырып есеп шығару мысалын көрсет.

Зертханалық жұмыс №4

Тақырыбы:Іздеу есебін шешу.


Жалпы мәлімет

Массивтер көбінесе статистикалық мәліметтер, анықтамалық баслымдар, сөздіктер дайындауда қолданылады. Ақпаратты іздеудің ең қарапайым әдісі бұл жағдайда массивтың барлық элементтерін тізбектеп қарап шығу болып табылады. Іздеуді жеңілдету мақсатында массив мазмұны белгілі әдістермен сұрыпталып, реттеледі.


Мысалы: Реттелген массивте керекті элементті іздеу есебін және оны шешу алгоритмін қарастырайық.

N элементтен тұратын нақты сандардың А реттелген массивы берілген. Массивте В саны бар ма, егер бар болса оның массивтегі номерін анықтау керек.

А массивында В –ға тең элемент бар болып, A[p]=B болатындай қандай да бір p индексі бар болсын. Кез-келген салыстырудың A[s]Ортасынан бөлу алгоритмі
Алдымен массивтың шеткі элементтері 1 мен n – ді элементті іздеу шекраралары ретінде алады да, осы шекараларды қадамнан кейін қадам жүргізе отырып, бір-біріне сәйкес келгенше жалғастыра береді: B ны A[s] пен, мұнда s - шекаралардың арифметикалық ортасының бүтін бөлігі, егер A[s]p:=1; q:=n;

while p

begin

s:=(p+q) div 2;



if a[s]

else q:=s;

end;
Схема түрінде іздеу процесін келесі схема түрінде бейнелеуге болады:

+-------------------------0-------------------------------+

¦ +---------------1---------------¦

¦ +-------2--------+ ¦

¦ ¦ +----3---¦ ¦

¦ ¦ +--4-+ ¦ ¦

¦ ¦ +-5+ ¦ ¦ ¦

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


Ортасынан бөлу алгоритмі жоғары тез әрекеттілікке ие. Негізінен ортасынан бөлу алгоритмінің идеясы көптеген алгоритмдер құруда пайдалы болып табылады. Алгоритмнің негізгі мәні «бөліп ал да, өкіміңді жүргіз» мағынасына келеді.

Бақылау сұрақтары:

  1. Ортасынан бөлу әдісімен элементті іздеу идеясы неменеге негізделген?

  2. Ортасынан бөлу әдісімен массив элементін іздеу алгоритмін жасаудағы әрекеттер тізбегін сипатта.


Тапсырмалар варианттары:

  1. 15 элементті массивті клавиатурадан енгізген бүтін сандардан сақтау программасын жаса. Массивтың мазмұны өсу реті бойынша сұрыпталады. Осыдан кейін, клавиатурадан бақылау саны енгізіледі де, массивте бар-жоғы тексеріледі. Бар болса, массивтің элементі номері монитор экранына шығарылады.

  2. Массивте 10 әртүрлі бүтін сандарды сақтауды ұйымдастыратын программа жаса. Массивтың мазмұны өсу реті бойынша сұрыпталады. Осыдан кейін, клавиатурадан бақылау саны енгізіледі де, массивте бар-жоғы тексеріледі. Бар болса, массивтың бақылау санына тең элементі нольмен ауыстырылады да, массив монитор экранына шығарылады.

  3. Массивте 15 әртүрлі бүтін сандарды сақтауды ұйымдастыратын программа жаса. Массивтың мазмұны кему реті бойынша сұрыпталады. Осыдан кейін, клавиатурадан бақылау саны енгізіледі де, массивте бар-жоғы тексеріледі. Бар болса, экранға бақылау санына дейінгі массив мазмұны шығарылады.

Зертханалық жұмыс №5

Тақырыбы: Іздеу есебін шешу. Толық іздеу: тармақтар және шекаралар әдістері. Динамикалық программалау.


Жалпы мәлімет

Массивтер көбінесе статистикалық мәліметтер, анықтамалық баслымдар, сөздіктер дайындауда қолданылады. Ақпаратты іздеудің ең қарапайым әдісі бұл жағдайда массивтың барлық элементтерін тізбектеп қарап шығу болып табылады. Іздеуді жеңілдету мақсатында массив мазмұны белгілі әдістермен сұрыпталып, реттеледі.


Мысалы: Реттелген массивте керекті элементті іздеу есебін және оны шешу алгоритмін қарастырайық.

N элементтен тұратын нақты сандардың А реттелген массивы берілген. Массивте В саны бар ма, егер бар болса оның массивтегі номерін анықтау керек.

А массивында В –ға тең элемент бар болып, A[p]=B болатындай қандай да бір p индексі бар болсын. Кез-келген салыстырудың A[s]Ортасынан бөлу алгоритмі
Алдымен массивтың шеткі элементтері 1 мен n – ді элементті іздеу шекраралары ретінде алады да, осы шекараларды қадамнан кейін қадам жүргізе отырып, бір-біріне сәйкес келгенше жалғастыра береді: B ны A[s] пен, мұнда s - шекаралардың арифметикалық ортасының бүтін бөлігі, егер A[s]p:=1; q:=n;

while p

begin

s:=(p+q) div 2;



if a[s]

else q:=s;

end;
Схема түрінде іздеу процесін келесі схема түрінде бейнелеуге болады:

+-------------------------0-------------------------------+

¦ +---------------1---------------¦

¦ +-------2--------+ ¦

¦ ¦ +----3---¦ ¦

¦ ¦ +--4-+ ¦ ¦

¦ ¦ +-5+ ¦ ¦ ¦

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


Ортасынан бөлу алгоритмі жоғары тез әрекеттілікке ие. Негізінен ортасынан бөлу алгоритмінің идеясы көптеген алгоритмдер құруда пайдалы болып табылады. Алгоритмнің негізгі мәні «бөліп ал да, өкіміңді жүргіз» мағынасына келеді.

Бақылау сұрақтары:

  1. Ортасынан бөлу әдісімен элементті іздеу идеясы неменеге негізделген?

  2. Ортасынан бөлу әдісімен массив элементін іздеу алгоритмін жасаудағы әрекеттер тізбегін сипатта.


Тапсырмалар варианттары:

  1. 10 бүтін сан массивы беріледі. Оны сұрыптап, ондағы бақылау санын тап. Бақылау санына дейінгі барлық элементтерді қарама-қарсыға өзгерт.

  2. 20 символдан тұратын массив берілген. Сұрыптап, ондағы бақылау символын тап. Экранға бақылау символынан бастағандағы элементтерді шығар.

20 саннан тұратын А массивы берілген. Оны кему реті бойынша орналастыр. Клавиатурадан 2 a және b бақылау сандарын енгіз. Сандар массивында a мен b аралығында жатқан сандардың бар-жоғын тексер. Бар болса, табылған сандар мен индекстерін экранға шығар.
Зертханалық жұмыс №6

Тақырыбы: Жылдам іздеу



Жалпы мәлімет

Екілік іздеу тармақтары программалауда кең таралған. Екілік іздеу тармақтарының әрбір төбесінің мәні:



              1. Оның сол жағындағы бұтақ төбесінің кез келген мәнінен үлкен немесе тең.

              2. Оның оң жақ бұтағының төбесінің кез келгенінің мәнінен кіші.

5 7

2 8 5 8


0 7 0 6

9 9


6 2

Программада екілік іздеу тармағының таралуы бұл тармақтарда іздеу әдістерінің тиімділігінің нәтижесі болып табылады.

Сызықтық құрылғылар үшін тізбектеліп іздеу алгоритмінің күрделілігі – О(n) –ға тең. Мұндағы n-құрылым элементтер саны. Ал аяқталатын бинарлық тармақ үшін күрделілігі – О(log2n)-ға тең.

Мысалға: 10000 элементтен тұратын тізімде тізбектеп іздеуде салыстырудың максимальды саны 10000-ға тең болады. Ал аяқталған тармақта іздеу 14 салыстырудан аспас еді.

Екілік іздеу тармағына элементті осу алгоритмі (тармақты қарау үнемі түбірден басталады):


        1. тармаққа қосылатын мән ағымдағы түйін мәніне салыстырылады.

        2. Егер тармаққа қосылтын мән ағымдағы түйін мәнінен кіші болса, онда келесілер тексеріледі:

а) егер ағымдағы түйінде ұрпақтар жоқ болса, онда жаңағы мәні бар түйінді сол жақ ұрпақ ретінде бекітеміз.

б) әйтпесе, (егер ұрпақ болса) тармақтың сол жақ бұтағы арқылы бір деңгейге төмендетеміз.



        1. Егер тармаққа қосылатын мән ағымдағы түйін мәнінен үлкен немесе тең болса, келесілер тексеріледі:

а) егер оң жақтағы ағымдағы түйінде ұрпақтар жоқ болса, онда мәні бар түйінді оң жақ ұрпқ ретінде бекітеміз.

б) әйтпесе, оң жақ бұтақ бойымен бір деңгейге төмендетеміз.



Екілік тармақтармен жүргізілетін амалдар

Тармақты толығымен қарап өту алгоритмі

Тармақтың төбелерін сұрыптау алгоритмі – тармақты толығымен қарап өту алгоритмі деп аталады. Мұндай алгоритмдер түйінде үш түрлі әрекет жасайды: түйінге кіреді, сол жақ бұтақпен рекурсивті түрде төмендейді, рекурсивті түрде оң жақ бұтақпен төмендейді.

Тармақты қарап шығудың 3 түрлі негізгі әдісі бар:


  1. Тура әдіс;

  2. Симметриялы әдіс;

  3. Кері әдіс;

Тармақты толығымен қарап шығу алгоритмі олардың түйініндегі өздерінің әрекеттерімен байланысты реттерімен ажыратылады.

  1. Тура әдіс (жоғарыдан төмен қарай):

- түйінге кіру;

- сол жақ бұтақтан өту;

- оң жақ бұтақтан өту;

(1) 7

5 8

0 6 9


2

Екілік тармақ берілген. Бұл тармақтағы түйінге кіру реті келесідей болады:

7 5 0 2 6 8 9


  1. Симметриялық әдіс (солдан оңға қарай):

- сол жақ бұтақтан жүріп өту;

- түйінге кіру;

- оң жақ бұтақтан жүріп өту;

Берілген (1) тармақ үшін симметриялық қарап шығу келесі түрде болады:

0 2 5 6 7 8 9

Екілік тармақты симметриялық қарап шығу әдісі элементтерді өсу ретімен орналастырды. Осылайша, сұрыптаудың тағы бір алгоритмін ұсынуға болады:

А) массив негізінде сұрыптау;

В) тармақты симметриялық қарап шығу әдісі жүзеге асады;

Мұндағы ең жақсы жағдайда алгоритмнің тиімділігі O(n log2n) болады.


  1. Тармақты кері қарай қарап шығу әдісі (төменнен жоғарыға қарай):

- сол жақ тармақтан жүріп өту;

- оң жақ тармақтан жүріп өту;

- түйінге кіру;

Осы әдіс үшін тармақты жүріп өтудің жолы:

2 0 6 5 9 8 7

өрнектің екілік тармақтарын қарап өтуде жоғарыда берілген үш әдіспен мынаны аламыз:



  1. Қарап шығудың тура әдісі. ¤рнектерді жазудың префиксті форматына (жоғарыдан төменге қарай) сәйкес келеді.

  2. Қарап шығудың симметриялық әдісі өрнектерді жазудың инфиксті форматина сәйкес келеді.

  3. қарап шығудың кері әдісі өрнектерді жазудың постфиксті форматына сәйкес келеді.


Екілік іздеу тармағынан элементті алып тастау.

Тармақтан элементті алып тастау алгоритмі тармақтағы осы элементтің орналасқан орнына тәуелді болады және келесі төрт жағдайды қамтиды:



  1. Мәні х-ке тең болатын элемент жоқ.

  2. Мәні х-ке тең болатын элемент терминальды түйін болып табылады.

  3. Мәні х-ке тең болатын элемент бір ғана ұрпақты болады.

  4. Мәні х-ке тең болатын элемент екі ұрпақты болады.

Бір ғана ұрпағы болатын элементті алып тастауда ешқандай күрделілік жоқ. Мұндай әрекеттер сызықтық тізімдегі элементті алып тастауға ұқсас болады.




Егер элемент екі ұрпақты болса, онда екі бағытта бір ғана сілтемемен көрсетуге келмейді. Бұл жағдайда өшірілетін элементті ауыстыруға тура келеді. Ауыстыратын элемент үшін оның сол жақтағы ең оң жаққы элемент, ал оң жақтағы ең сол жаққы элемент таңдап алынады (6 және 8 өшірілетін элементке мәндері жағынан жақын элементтер).




Элементі өшіру алгоритмі. Алгоритм жоғалғанда қарастырылатын 4 жағдайды қамтиды:



1-жағдай: өшірілетін түйін табылған жоқ. Яғни өшірук алгоритмі өз жұмысын тоқтатады.

2-жағдай: түйіннің ұрпақтары жоқ. Яғни жапырақ болып табылады. Бұл жағдайда ата-аналық түйінді оның бұтағы бос болатындай етіп жаңарту керек.

3-жағдай:

1. Түйіннің сол жақ ұрпағы бар, оң жақ ұрпағы жоқ. Яғни сол жақ бұтақты оның ата-анасына жалғастыру керек.

2. Түйіннің оң жақ ұрпағы бар, сол жақ ұрпағы жоқ. Яғни түйіннің оң жақ бұтағын оның ата-анасына жалғастыру керек.

4-жағдай: екі ұрпағы бар түйінді алып тастау немесе өшіру. Мұнда өшірілетін түйінді ауыстыру қажет. Ауыстыру үшін сол жақ бұтағы ең оң жақтағы түйінді таңдаймыз.
Келесілерді анықтаймыз:

D – өшірілетін түйін

P – өшірілетін элементтің ата-анасы

R – ауыстыратын түйін

PR – R түйіннің ата-анасы.


  1. D түйінінің сол жақ бұтағына көшеміз. Себебі, R ауыстыратын түйін өшірілетін D түйінінен кіші болады.

  2. R ауыстыратын түйін D түйінінің сол жақ бұтағындағы максимальды түйін болып табылады. Оң жақ бұтақ бойынша төмен жылжып, P ауыстыратын түйінді іздейміз. Жылжу барысында RR ата-аналық түйінді бақылап отырамыз. Мұнда екі мүмкін жағдай бар:

  1. Оң жақ бұтақ бос. R ауыстытылатын түйін өшірілетін түйіннің сол жақ баласы болып табылады. Ал PR сәйкесінше D түйініне көрсетіледі. Мұндай жағдайда келесі әрекеттерді орындаймыз:

А) D түйінінің оң жақ бұтағын R түйініне қосамыз.

Б) ¤шірілетін түйіннің P ата-анасын R түйініне қосамыз.




P P


D R

R PR=D


Оң жақ бұтақ оң жақ бұтақ


  1. Оң жақ бұтақ бос емес. Мұндай жағдайда ауыстыратын түйін жапырақтық түйін болады немесе тек қана сол жақ бұтағы бар түйін болады. Келесі әрекеттерді орындаймыз:

А) R түйінін тармақтан бөліп аламыз.

Б) R түйінінің ұрпақтарын оның ата-аналық РR түйініне жалғаймыз. (R-дің сол жақ бұтағы РR-ға оң жақ бұтақ болып жалғанады).

С) ¤шірілетін D түйіні R түйінімен ауыстырылады. Яғни D түйінінің ұрпақтары R түйінінің ұрпақтары болып жалғанады, ал R түйіні ата-аналық P түйініне жалғанады.



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет