- •Екі өлшемді массивтерді өңдеудің типтік алгоритмдері. «Көбік» әдісімен сұрыптау
- •Массивті түгел өңдеу
- •Массивті оның бағандары бойынша өңдеу алгоритмдері:
- •Екі өлшемді массивтерді диагоналдарға қатысты өңдеу алгоритмдері
- •Квадрат матрицаны диагоналдарға қатысты өңдеу (тиімді айналым)
- •«Көбік» әдісімен сұрыптау
- •Сурет 4.1- «Көбікті» сұрыптау
- •Сұрыптау әдістерін қолдануға мысалдар
- •Сұрыптау есептерінің ішінде массив элементтерінің бір бөлігін өсу ретімен және екінші бөлігін кему ретімен сұрыптау қажеттілігі жиі кездеседі.
- •Сурет 4.2
- •Сурет 4.3
Квадрат матрицаны диагоналдарға қатысты өңдеу (тиімді айналым)
Квадрат массивті оның диагодалдарына қатысты өңдеудің жоғарыда келтірілген алгоритмдері аса тиімді емес. Өйткені, оларда массивтің барлық элементтері қарастырылады. Элементтерді қарастыру санын азайту арқылы алгоритмнің тиімділігін едәуір арттыруға болады. Ол үшін ішкі циклдағы басқарушы айнымалының бастапқы немесе соңғы мәнінің сыртқы цикл есептеуішінің мәніне тәуелділігін ендіру керек.
Тиімді тәсілді пайдаланып квадрат матрицаларды диагоналдарына қатысты өңдеу алгоритм-деріне мысалдар келтірейік.
1-мысал. Квадрат массивтің элементтерін 1-лермен келесі суреттегідей етіп толтыру керек:
7.6-кесте |
|||
Бас диагоналда жане одан төмен |
Бас диагоналда жане одан жоғары |
Қосымша диагоналда жане одан төмен |
Қосымша диагоналда жане одан жоғары |
100000000 110000000 111000000 111100000 111110000 111111000 111111100 111111110 111111111 |
111111111 011111111 001111111 000111111 000011111 000001111 000000111 000000011 000000001 |
111111111 111111110 111111100 111111000 111110000 111100000 111000000 110000000 100000000 |
000000001 000000011 000000111 000001111 000011111 000111111 001111111 011111111 111111111 |
Бейсик-те: … for i=1 to n for j=1 to i x(i,j)=1 next j, i
Паскаль-да: … for i:=1 to n do for j:=1 to i do x[i,j]:=1; … |
Бейсик-те: … for i=1 to n for j=i to n x(i,j)=1 next j, i
Паскаль-да: … for i:=1 to n do for j:=i to n do x[i,j]:=1; … |
Бейсик-те: … for i=1 to n for j=1 to (n-i+1) x(i,j)=1 next j, i
Паскаль-да: … for i:=1 to n do for j:=1 to (n-i+1) do x[i,j]:=1; |
Бейсик-те: … for i=1 to n for j=(n-i+1) to n x(i,j)=1 next j, i
Паскаль-да: … for i:=1 to n do for j:=(n-i+1) to n do x[i,j]:=1; |
Бақылау сұрақтары
Екі өлшемді массивті өңдеу алгоритмінде i және j циклдік параметрлерінің орнын ауыстырса не болады?
Бас диагоналдағы элементтердің индекстерінің тәуелділігі қандай? Қосымша диагоналда ше?
Жаттығулар
NxM өлшемді матрицаның әр қатарындағы минимум элементтердің ең үлкенін және әр бағанындағы максимум элементтердің ең кішісін табу керек.
7.2-суретте көрсетілгендей етіп квадрат матрицаларды толтырыңдар:
Сурет 7.2 – Квадрат матрицаларды толтыруға тапсырмалар
«Көбік» әдісімен сұрыптау
Бұл тақырыпта біртипті массивтердің типтік алгоритмдерін өңдеумен танысуды жалғастырамыз типтік алгоритмдердегі массив элементтерін сұрыптаудың олимпиадалық тапсырмаларын қарастырамыз.
Жұмыс мақсаты: танысқан типтік алгоритмдері қолдану арқылы классикалық есептерді шығару.
Сұрыптауды берілген массив элементтерін өсу реті бойынша сұрыптау арқылы қарастырамыз. Мысалы, 5, 8, 4, 9, 3 массивін сұрыптайық:
