- •Комбинаторика. N-нен к элементтен тұратын комбинаторлық топтар құрастыру Терулер
- •Программасы
- •Программаны құру бойынша түсіндірмелер
- •Программасы
- •Тапсырма 5
- •Терулер және Ньютон биномы
- •Программасы
- •Программасы
- •Тапсырма 6
- •Тапсырма 7. Шахмат тақтасының 32 қара өрістерінде 12 ақ және 12 қара шашкаларды қанша әдіспен орналастыруға болады? Қосымша сабақтар үшін
- •Тапсырма 8
- •Жиі кездесетін процедуралар мен функциялар кітапханасы
- •Жаттығулар
- •Жауаптар
- •Типовые алгоритмы формирования групп:
- •Задача "Кодовый замок сейфа"
- •Задачи из "Теории чисел"
- •Геометрические задачи
- •Ключевые термины
- •Краткие итоги
- •Набор для практики
Информатикадан олимпиада есептерін шешу әдістері №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 процедурасына назар аудару қажет.
