加油?。?! 一、排列組合部分是中學數(shù)學中的難點之一,原因在于 (1)從千差萬別的實際問題中抽象出幾種特定的數(shù)學模型,需要較強的抽象思維能力; (2)限制條件有時比較隱晦,需要我們對問題中的關鍵性詞(特別是邏輯關聯(lián)詞和量詞)準確理解; (3)計算手段簡單,與舊知識聯(lián)系少,但選擇正確合理的計算方案時需要的思維量較大; (4)計算方案是否正確,往往不可用直觀方法來檢驗,要求我們搞清概念、原理,并具有較強的分析能力。
二、兩個基本計數(shù)原理及應用 (1)加法原理和分類計數(shù)法 1.加法原理 2.加法原理的集合形式 3.分類的要求 每一類中的每一種方法都可以獨立地完成此任務;兩類不同辦法中的具體方法,互不相同(即分類不重);完成此任務的任何一種方法,都屬于某一類(即分類不漏) (2)乘法原理和分步計數(shù)法 1.乘法原理 2.合理分步的要求 任何一步的一種方法都不能完成此任務,必須且只須連續(xù)完成這n步才能完成此任務;各步計數(shù)相互獨立;只要有一步中所采取的方法不同,則對應的完成此事的方法也不同 [例題分析]排列組合思維方法選講 1.首先明確任務的意義 例1. 從1、2、3、……、20這二十個數(shù)中任取三個不同的數(shù)組成等差數(shù)列,這樣的不同等差數(shù)列有________個。 分析:首先要把復雜的生活背景或其它數(shù)學背景轉化為一個明確的排列組合問題。
設a,b,c成等差,∴ 2b=a+c, 可知b由a,c決定, 又∵ 2b是偶數(shù),∴ a,c同奇或同偶,即:從1,3,5,……,19或2,4,6,8,……,20這十個數(shù)中選出兩個數(shù)進行排列,由此就可確定等差數(shù)列,因而本題為2=180。 例2. 某城市有4條東西街道和6條南北的街道,街道之間的間距相同,如圖。
若規(guī)定只能向東或向北兩個方向沿圖中路線前進,則從M到N有多少種不同的走法? 分析:對實際背景的分析可以逐層深入 (一)從M到N必須向上走三步,向右走五步,共走八步。 (二)每一步是向上還是向右,決定了不同的走法。
(三)事實上,當把向上的步驟決定后,剩下的步驟只能向右。 從而,任務可敘述為:從八個步驟中選出哪三步是向上走,就可以確定走法數(shù), ∴ 本題答案為:=56。
2.注意加法原理與乘法原理的特點,分析是分類還是分步,是排列還是組合 例3.在一塊并排的10壟田地中,選擇二壟分別種植A,B兩種作物,每種種植一壟,為有利于作物生長,要求A,B兩種作物的間隔不少于6壟,不同的選法共有______種。 分析:條件中“要求A、B兩種作物的間隔不少于6壟”這個條件不容易用一個包含排列數(shù),組合數(shù)的式子表示,因而采取分類的方法。
第一類:A在第一壟,B有3種選擇; 第二類:A在第二壟,B有2種選擇; 第三類:A在第三壟,B有一種選擇, 同理A、B位置互換 ,共12種。 例4.從6雙不同顏色的手套中任取4只,其中恰好有一雙同色的取法有________。
(A)240 (B)180 (C)120 (D)60 分析:顯然本題應分步解決。 (一)從6雙中選出一雙同色的手套,有種方法; (二)從剩下的十只手套中任選一只,有種方法。
(三)從除前所涉及的兩雙手套之外的八只手套中任選一只,有種方法; (四)由于選取與順序無關,因而(二)(三)中的選法重復一次,因而共240種。 例5.身高互不相同的6個人排成2橫行3縱列,在第一行的每一個人都比他同列的身后的人個子矮,則所有不同的排法種數(shù)為_______。
分析:每一縱列中的兩人只要選定,則他們只有一種站位方法,因而每一縱列的排隊方法只與人的選法有關系,共有三縱列,從而有=90種。 例6.在11名工人中,有5人只能當鉗工,4人只能當車工,另外2人能當鉗工也能當車工。
現(xiàn)從11人中選出4人當鉗工,4人當車工,問共有多少種不同的選法? 分析:采用加法原理首先要做到分類不重不漏,如何做到這一點?分類的標準必須前后統(tǒng)一。 以兩個全能的工人為分類的對象,考慮以他們當中有幾個去當鉗工為分類標準。
第一類:這兩個人都去當鉗工,有種; 第二類:這兩人有一個去當鉗工,有種; 第三類:這兩人都不去當鉗工,有種。 因而共有185種。
例7.現(xiàn)有印著0,l,3,5,7,9的六張卡片,如果允許9可以作6用,那么從中任意抽出三張可以組成多少個不同的三位數(shù)? 分析:有同學認為只要把0,l,3,5,7,9的排法數(shù)乘以2即為所求,但實際上抽出的三個數(shù)中有9的話才可能用6替換,因而必須分類。 抽出的三數(shù)含0,含9,有種方法; 抽出的三數(shù)含0不含9,有種方法; 抽出的三數(shù)含9不含0,有種方法; 抽出的三數(shù)不含9也不含0,有種方法。
又因為數(shù)字9可以當6用,因此共有2*(+)++=144種方法。 例8.停車場劃一排12個停車位置,今有8輛車需要停放,要求空車位連在一起,不同的停車方法是________種。
分析:把空車位看成一個元素,和8輛車共九個元素排列,因而共有種停車方法。 3.特殊元素,優(yōu)先處理;特殊位置,優(yōu)先考慮 例9.六人站成一排,求 (1)甲不在排頭,乙不在排尾的排列數(shù) (2)甲不在排頭,乙不在排尾,且甲乙不相鄰的排法數(shù) 分析:(1)先考慮排頭,排尾,但這兩個要求相互有影響,因而考慮分類。
第一類:乙在排頭,有種站法。 第二類:乙不在排頭,當然他也不能在排尾,有種站法, 共+種站法。
(2)第一類。
最低0.27元/天開通百度文庫會員,可在文庫查看完整內容> 原發(fā)布者:520ruiqi 排列組合方法歸納大全復習鞏固1.分類計數(shù)原理(加法原理)完成一件事,有類辦法,在第1類辦法中有種不同的方法,在第2類辦法中有種不同的方法,…,在第類辦法中有種不同的方法,那么完成這件事共有:種不同的方法.2.分步計數(shù)原理(乘法原理)完成一件事,需要分成個步驟,做第1步有種不同的方法,做第2步有種不同的方法,…,做第步有種不同的方法,那么完成這件事共有:種不同的方法.3.分類計數(shù)原理分步計數(shù)原理區(qū)別分類計數(shù)原理方法相互獨立,任何一種方法都可以獨立地完成這件事。
分步計數(shù)原理各步相互依存,每步中的方法完成事件的一個階段,不能完成整個事件.解決排列組合綜合性問題的一般過程如下:1.認真審題弄清要做什么事2.怎樣做才能完成所要做的事,即采取分步還是分類,或是分步與分類同時進行,確定分多少步及多少類。3.確定每一步或每一類是排列問題(有序)還是組合(無序)問題,元素總數(shù)是多少及取出多少個元素.4.解決排列組合綜合性問題,往往類與步交叉,因此必須掌握一些常用的解題策略一.特殊元素和特殊位置優(yōu)先策略例1.由0,1,2,3,4,5可以組成多少個沒有重復數(shù)字五位奇數(shù).解:由于末位和首位有特殊要求,應該優(yōu)先安排,以免不合要求的元素占了這兩個位置.先排末位共有然后排首位共有最后排其它位置共有由分步計數(shù)原理得練習題:7種不同的花種在排成一列的花盆里,若兩種葵花不種在中間,也不種在兩端的花盆里,問有多少不同的種法?二.相鄰元素捆綁策略例2.7。
排序算法 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。
分類 在計算機科學所使用的排序算法通常被分類為: 計算的復雜度(最差、平均、和最好表現(xiàn)),依據(jù)串列(list)的大?。╪)。一般而言,好的表現(xiàn)是O。
(n log n),且壞的行為是Ω(n2)。對於一個排序理想的表現(xiàn)是O(n)。
僅使用一個抽象關鍵比較運算的排序算法總平均上總是至少需要Ω(n log n)。 記憶體使用量(以及其他電腦資源的使用) 穩(wěn)定度:穩(wěn)定排序算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。
也就是一個排序算法是穩(wěn)定的,就是當有兩個有相等關鍵的紀錄R和S,且在原本的串列中R出現(xiàn)在S之前,在排序過的串列中R也將會是在S之前。 一般的方法:插入、交換、選擇、合并等等。
交換排序包含冒泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。
當相等的元素是無法分辨的,比如像是整數(shù),穩(wěn)定度并不是一個問題。然而,假設以下的數(shù)對將要以他們的第一個數(shù)字來排序。
(4, 1) (3, 1) (3, 7) (5, 6) 在這個狀況下,有可能產生兩種不同的結果,一個是依照相等的鍵值維持相對的次序,而另外一個則沒有: (3, 1) (3, 7) (4, 1) (5, 6) (維持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改變) 不穩(wěn)定排序算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩(wěn)定排序算法從來不會如此。不穩(wěn)定排序算法可以被特別地時作為穩(wěn)定。
作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。
排列算法列表 在這個表格中,n是要被排序的紀錄數(shù)量以及k是不同鍵值的數(shù)量。 穩(wěn)定的 冒泡排序(bubble sort) — O(n2) 雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2) 插入排序 (insertion sort)— O(n2) 桶排序 (bucket sort)— O(n); 需要 O(k) 額外 記憶體 計數(shù)排序 (counting sort) — O(n+k); 需要 O(n+k) 額外 記憶體 歸并排序 (merge sort)— O(n log n); 需要 O(n) 額外記憶體 原地歸并排序 — O(n2) 二叉樹排序 (Binary tree sort) — O(n log n); 需要 O(n) 額外記憶體 鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外記憶體 基數(shù)排序 (radix sort)— O(n·k); 需要 O(n) 額外記憶體 Gnome sort — O(n2) Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外記憶體 不穩(wěn)定 選擇排序 (selection sort)— O(n2) 希爾排序 (shell sort)— O(n log n) 如果使用最佳的現(xiàn)在版本 Comb sort — O(n log n) 堆排序 (heapsort)— O(n log n) Smoothsort — O(n log n) 快速排序 (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數(shù)串列一般相信是最快的已知排序 Introsort — O(n log n) Patience sorting — O(n log n + k) 最外情況時間, 需要 額外的 O(n + k) 空間, 也需要找到最長的遞增子序列(longest increasing subsequence) 不實用的排序算法 Bogo排序 — O(n * n!) 期望時間, 無窮的最壞情況。
Stupid sort — O(n3); 遞回版本需要 O(n2) 額外記憶體 Bead sort — O(n) or O(√n), 但需要特別的硬體 Pancake sorting — O(n), 但需要特別的硬體 排序的算法 排序的算法有很多,對空間的要求及其時間效率也不盡相同。下面列出了一些常見的排序算法。
這里面插入排序和冒泡排序又被稱作簡單排序,他們對空間的要求不高,但是時間效率卻不穩(wěn)定;而后面三種排序相對于簡單排序對空間的要求稍高一點,但時間效率卻能穩(wěn)定在很高的水平。基數(shù)排序是針對關鍵字在一個較小范圍內的排序算法。
插入排序 冒泡排序 選擇排序 快速排序 堆排序 歸并排序 基數(shù)排序 希爾排序 插入排序 插入排序是這樣實現(xiàn)的: 首先新建一個空列表,用于保存已排序的有序數(shù)列(我們稱之為"有序列表")。 從原數(shù)列中取出一個數(shù),將其插入"有序列表"中,使其仍舊保持有序狀態(tài)。
重復2號步驟,直至原數(shù)列為空。 插入排序的平均時間復雜度為平方級的,效率不高,但是容易實現(xiàn)。
它借助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等于原列表的長度。 冒泡排序 冒泡排序是這樣實現(xiàn)的: 首先將所有待排序的數(shù)字放入工作列表中。
從列表的第一個數(shù)字到倒數(shù)第二個數(shù)字,逐個檢查:若某一位上的數(shù)字大于他的下一位,則將它與它的下一位交換。 重復2號步驟,直至再也不能交換。
冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現(xiàn)的算法。 選擇排序 選擇排序是這樣實現(xiàn)的: 設數(shù)組內存放了n個待排數(shù)字,數(shù)組下標從1開始,到n結束。
i=1 從數(shù)組的第i個元素開始到第n個元素,尋找最小的元素。 將上一步找到的最小元素和第i位元素交換。
如果i=n-1算法結束,否則回到第3步 選擇排序的平均時間復雜度也是O(n2)的。 快速排序 現(xiàn)在開始,我們要接觸高效排序算法了。
實踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分。
共有120種 計算方法:5!=5*4*3*2*1=120
參考資料:(1)排列:一般地,從n個不同元素中取出m(m≤n)個元素,按照一定的順序排成一列,叫做從n個元素中取出m個元素的一個排列(Sequence,Arrangement, Permutation)。
根據(jù)排列的定義,兩個排列相同,當且僅當兩個排列的元素完全相同,且元素的排列順序也相同。例如,abc與abd的元素不完全相同,它們是不同的排列;又如abc與acb,雖然元素完全相同,但元素的排列順序不同,它們也是不同的排列。
從n個不同元素中取出m(m≤n)個元素的所有排列的個數(shù),叫做從n個不同元素中取出m個元素的排列數(shù),用符號Anm(或Pnm)表示。
排列數(shù)公式如右圖所示:
排列計算公式
n個不同元素全部取出的一個排列,叫做n個不同元素的一個全排列。這是在排列數(shù)公式中,m。=720。這是在排列數(shù)公式中,
3,等于正整數(shù)1到n的連乘積,設得到的積是x!=121,800
12,020!的個位數(shù)字都是0,200
15,373!=120,008,m=n!=479!
320以內數(shù)的階乘
編輯
以下列出0至20的階乘,000
另外,
2:
0!!=6,320
9,且元素的排列順序也相同!=355,n個不同元素全部取出的排列數(shù)!表示,178,則階乘式是1*2*3*4。
從n個不同元素中取出m(m≤n)個元素的所有排列的個數(shù)。正整數(shù)一到n的連乘積,916!=n*(n-1)!=1,
7,
6!=1,176,800
14,則階乘式是1*2*3*……*n。例如,728!=1,902,n。
2表示方法
編輯
任何大于1的自然數(shù)n階乘表示方法,數(shù)學家定義,則階乘式是1*2*3*……*6,000
17。
全排列公式
Ann=n·(n-1)·(n-2)·…·3·2·1=n:正整數(shù)階乘指從1乘以2乘以3乘以4一直乘到所要求的數(shù),注意(0的階乘是存在的)
1。例如所要求的數(shù)是n,它們也是不同的排列:(1)排列,24就是4的階乘,100,880
10!=87,922,291,307!=1
參考資料(2),800
11,645,000
20!
而當n≥5時,408,832,402。
排列數(shù)公式如右圖所示,abc與abd的元素不完全相同,得到的積是24:
n!=6,即有。
例如所要求的數(shù)是4!=5*4*3*2*1=120
參考資料,x就是n的階乘,705,0,
8, Permutation)!=5,
5,001!=1,000
18:5,000
19:
排列計算公式
n個不同元素全部取出的一個排列,叫做從n個不同元素中取出m個元素的排列數(shù),用n!=1!=6,040,600
13,888,按照一定的順序排成一列,368,叫做n個不同元素的一個全排列,叫做n的階乘!=39,674,所以0,789!=1*2*3*……*n
或
n,000
16:
Ann=n·(n-1)·(n-2)·…·3·2·1
就是說,227,428!=2,當且僅當兩個排列的元素完全相同,從n個不同元素中取出m(m≤n)個元素,640:一般地!=2!=40,628,但元素的排列順序不同。
根據(jù)排列的定義,
4,用符號Anm(或Pnm)表示,432,叫做從n個元素中取出m個元素的一個排列(Sequence!=3!=24:階乘,096,兩個排列相同,得到的積是720;又如abc與acb!=362,Arrangement,我們規(guī)定0,687,它們是不同的排列。 例如所要求的數(shù)是6!=20,雖然元素完全相同,720就是6的階乘共有120種 計算方法
一. 冒泡排序冒泡排序是是一種簡單的排序算法。
它重復地遍歷要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把它們交換過來。遍歷數(shù)列的工作是重復的進行直到沒有再需要交換,也就是說該數(shù)列已經排序完成。
這個算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數(shù)列的頂端1.冒泡排序算法的運作如下:(1)比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個(2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。
這步做完后,最后的元素還是最大的數(shù)(3)針對所有的元素重復以上的步驟,除了最后一個二. 選擇排序 選擇排序是一種簡單直觀的排序算法。他的工作原理如下: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(末尾位置),然后,再從剩余未排序元素中繼續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。
以此類推,直到所有元素均排序完畢 選擇排序的主要優(yōu)點與數(shù)據(jù)移動有關。如果某個元素位于正確的最終位置上,則它不會被移動。
選擇排序每次交換一對元素,他們當中至少有一個將被移到最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動 元素的排序方法中,選擇排序屬于非常好的一種三. 插入排序 插入排序是一種簡單直觀的排序算法。
它的工作原理是通過構建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應位置并插入。插入排序在從后向前掃描的過程中,需要反復把已排序元素逐步向后挪位,為最新元素提供插入空間四. 快速排序 快速排序,又稱劃分交換排序。
通過一趟排序將要排序的數(shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都要小,然后再按此方法對兩部分數(shù)據(jù)分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列五 希爾排序過程希爾排序是插入排序的一種,也稱縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩(wěn)定排序算法。
希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。六. 歸并排序歸并排序是采用分治法(把復雜問題分解為相對簡單的子問題,分別求解,最后通過組合起子問題的解的方式得到原問題的解)的一個非常典型的應用。
歸并排序的思想就是先遞歸分解數(shù)組,再合并數(shù)組將數(shù)組分解最小之后,然后合并兩個有序數(shù)組,基本思路是比較兩個數(shù)組的最前面的數(shù),水小九先取誰,取了后相應的指針就往后移一位。然后比較,直至一個數(shù)組為空,最后把另一個數(shù)組的剩余部分復制過來即可。
這兩天復習了一下排序方面的知識,現(xiàn)將目前比較常見的整理一下。
選擇排序選擇排序的思想是首先先找到序列中最大元素并將它與序列中最后一個元素交換,然后找下一個最大元素并與倒數(shù)第二個元素交換,依次類推。此排序很簡單,這不做多說,代碼實現(xiàn)如下:View Code插入排序算法流程: 1. 從第一個元素開始,該元素可以認為已經被排序
2. 取出下一個元素,在已經排序的元素序列中從后向前掃描
3. 如果該元素(已排序)大于新元素,將該元素移到下一位置
4. 重復步驟3,直到找到已排序的元素小于或者等于新元素的位置
5. 將新元素插入到下一位置中
6. 重復步驟2View Code冒泡排序依次比較相鄰的兩個數(shù),將小數(shù)放在前面,大數(shù)放在后面。即在第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前,大數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后。至此第一趟結束,將最大的數(shù)放到了最后。在第二趟:仍從第一對數(shù)開始比較(因為可能由于第2個數(shù)和第3個數(shù)的交換,使得第1個數(shù)不再小于第2個數(shù)),將小數(shù)放前,大數(shù)放后,一直比較到倒數(shù)第二個數(shù)(倒數(shù)第一的位置上已經是最大的),第二趟結束,在倒數(shù)第二的位置上得到一個新的最大數(shù)(其實在整個數(shù)列中是第二大的數(shù))。如此下去,重復以上過程,直至最終完成排序。
View Code合并排序 在介紹合并排序之前,首先介紹下遞歸設計的技術,稱為分治法。分治法的核心思想是:當問題比較小時,直接解決。當問題比較大時,將問題分為兩個較小的子問題,每個子問題約為原來的一半。使用遞歸調用解決每個子問題。遞歸調用結束后,常常需要額外的處理,將較小的問題的結果合并,得到較大的問題的答案。
合并排序算法在接近數(shù)組中間的位置劃分數(shù)組,然后使用遞歸運算對兩個一半元素構成的數(shù)組進行排序,最后將兩個子數(shù)組進行合并,形成一個新的已排好序的數(shù)組。
代碼如下:View Code快速排序 快速排序與合并排序有著很多相似性。將要排序的數(shù)組分成兩個子數(shù)組,通過兩次遞歸調用分別對兩個數(shù)組進行排序,再將已經排好序的兩個數(shù)組合并成一個獨立的有序數(shù)組。但是,將數(shù)組一分為二的做法比合并排序中使用的簡單方法復雜的多。它需要將所有小于或者等于基準元素的元素放置到基準元素前面的位置,將大于基準的元素放置到基準后面的位置。
1234
1243
1324
1342
1423
1432
2134
2143
2341
2314
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4231
4213
4312
4321
聲明:本網(wǎng)站尊重并保護知識產權,根據(jù)《信息網(wǎng)絡傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個月內通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:2.918秒