Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
InfOlimp_13-lab.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
231.94 Кб
Скачать

Информатикадан олимпиада есептерін шешу әдістері №13 лабораториялық жұмыс

Комбинаторика. N-нен к элементтен тұратын комбинаторлық топтар құрастыру Терулер

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

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

Басқаша айтатын болсақ, теруде элементтер реті емес, олардың құрамы маңызды. Осылайша, мысалы, M = {1, 2, 3, 4} жиынынан 4-тен 3 бойынша төрт түрлі терулер құруға болады: {1, 2, 3}, {1,2,4}, {2, 3, 4}, {1, 3, 4}.

n элементтен k бойынша түрлі терулер саны төмендегіше болады:

Егер k = 0, онда

n элементтен k бойынша орналастырулар саны тең, бірақ

екенін ескере отырып, терулер санын орналастырулар саны арқылы өрнектеуге болады, сонда:

.

Мысал 9. 10 нүкте берілген. Олардың ішінде ешбір үшеуі бір түзуде, ешбір төртеуі бір жазықтықта жатқан жоқ. Бұл нүктелер арқылы қанша түрлі жазықтық жүргізуге болады?

Геометриядан бізге бір түзуде жатпайтын үш нүктеден тек бір жазықтық жүргізуге болады деген аксиома белгілі.

Егер жазықтық А, В, С үш нүктесінен өтетін болса, онда В, А, С немесе С, В, А нүктелерінен де сол жазықтық өтеді, яғни жазықтық өтетін үш нүктенің орналасу реті маңызды емес. Онда 10-нан әрбір үш нүктеден өтетін жазықтық саны 10 элементтен 3-еу бойынша терулер санына тең.

n элементтен k бойынша терулер санын есептеу процедурасын құрайық. Ол үшін тек k санының факториалы есептелінетін екінші формуланы пайдаланған дұрыс. формуласында олардың үшеуін есептеу қажет (n!, (n - k)! и k!) және көрсетілген бүтін тип шегінен асып кететін үлкен сандар шығып кететін жағдай туындауы мүмкін.

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

Нәтижеде формуласын пайдаланамыз.

Процедурада барлық элементтер саны және таңдалған элементтер саны үшін формальді кіріс берілгендер ретінде n және k айнымалылары тағайындалады. Терулер мәні үшін шығыс параметрді с арқылы белгілейміз. Процедура аты - Сombіnatіon.

Procedure Combіnatіon(n, k : іnteger; var с : longіnt);

Кіріс параметрлер іnteger типті, ал шығыс параметр longіnt типті. Өйткені, теру санының мәні үлкен сан болуы мүмкін.

Процедураның өзіндегі айнымалылар – і- for циклі үшін айнымалы, р- k! факториалы үшін аралық айнымалы.

Процедурада теру үшін бастапқы мән беріледі (c := 1).

1-ден k-ға дейін for циклі ұйымдастырылады. Мұнда n элементтен k бойынша теру саны болып табылатын с айнымалысына көбейтінді жинақталады:

, (1) мұнда - 1-ден k-ға дейінгі көбейтінді белгісі.

Теру санын есептейтін процедура төмендегідей болады:

Procedure combіnatіon(n, k : іnteger; var с : longіnt);

var

і : longіnt;

begіn

с := 1;

for і := 1 to k do с := с*(n - k + і) dіv і

end;

Берілген есепті шешу программасын құру үшін негізгі программада combіnatіon процедурасына назар аудару қажет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]