2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 分治法.doc
《2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 分治法.doc》由會員分享,可在線閱讀,更多相關(guān)《2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 分治法.doc(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。
2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 分治法 分治算法的基本思想是將一個規(guī)模為N的問題分解為K個規(guī)模較小的子問題,這些子問題相互獨(dú)立且與原問題性質(zhì)相同。求出子問題的解,就可得到原問題的解。 分治法解題的一般步驟: (1)分解,將要解決的問題劃分成若干規(guī)模較小的同類問題; (2)求解,當(dāng)子問題劃分得足夠小時,用較簡單的方法解決; (3)合并,按原問題的要求,將子問題的解逐層合并構(gòu)成原問題的解。 分治法應(yīng)用 例1、 比賽安排(noip1996) 設(shè)有2^n(n<=6)個球隊進(jìn)行單循環(huán)比賽,計劃在2^n-1天內(nèi)完成,每個隊每天進(jìn)行一場比賽。設(shè)計一個比賽的安排,使在2^n-1天內(nèi)每個隊都與不同的對手比賽。例如n=2時的比賽安排為: 隊 1 2 3 4 比賽 1-2 3-4 第一天 1-3 2-4 第二天 1-4 2-3 第三天 算法分析:此題很難直接給出結(jié)果,我們先將問題進(jìn)行分解,設(shè)m=2^n,將規(guī)模減半,如果n=3(即m=8),8個球隊的比賽,減半后變成4個球隊的比賽(m=4),4個球隊的比賽的安排方式還不是很明顯,再減半到兩個球隊的比賽(m=2),兩個球隊的比賽安排方式很簡單,只要讓兩個球隊直接進(jìn)行一場比賽即可: 1 2 2 1 分析兩個球隊的比賽的情況不難發(fā)現(xiàn),這是一個對稱的方陣,我們把這個方陣分成4部分(即左上,右上,左下,右下),右上部分可由左上部分加1(即加m/2)得到,而右上與左下部分、左上與右下部分別相等。因此我們也可以把這個方陣看作是由M=1的方陣所成生的,同理可得M=4的方陣: 1 2 3 4 2 1 4 3 3 4 1 2 4 3 2 1 同理可由M=4方陣生成M=8的方陣: 1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 3 4 1 2 7 8 5 6 4 3 2 1 8 7 6 5 5 6 7 8 1 2 3 4 6 5 8 7 2 1 4 3 7 8 5 6 3 4 1 2 8 7 6 5 4 3 2 1 這樣就構(gòu)成了整個比賽的安排表。 在算法設(shè)計中,用數(shù)組a記錄2^n個球隊的循環(huán)比賽表,整個循環(huán)比賽表從最初的1*1方陣按上述規(guī)則生成2*2的方陣,再生成4*4的方陣,……直到生成出整個循環(huán)比賽表為止。變量h表示當(dāng)前方陣的大小,也就是要生成的下一個方陣的一半。 源程序: var i,j,h,m,n:integer; a:array[1..32,1..32]of integer; begin readln(n); m:=1;a[1,1]:=1;h:=1; for i:=1 to n do m:=m*2; repeat for i:=1 to h do for j:=1 to h do begin a[i,j+h]:=a[i,j]+h;{構(gòu)造右上角方陣} a[i+h,j]:=a[i,j+h];{構(gòu)造左下角方陣} a[i+h,j+h]:=a[i,j];{構(gòu)造右下角方陣} end; h:=h*2; until h=m; for i:=1 to m do begin for j:=1 to m do write(a[i,j]:4); writeln; end; end. 在分治算法中,若將原問題分解成兩個較小的子問題,我們稱之為二分法,由于二分法劃分簡單,所以使用非常廣泛。使用二分法與使用枚舉法求解問題相比較,時間復(fù)雜度由O(N)降到O(log2N),在很多實(shí)際問題中,我們可以通過使用二分法,達(dá)到提高算法效率的目的,如下面的例子。 例2 一元三次方程求解(noipxxtg) 題目大意:給出一個一元三次方程f(x)=ax3+bx2+cx+d=0 ,求它的三個根。所有的根都在區(qū)間[-100,100]中,并保證方程有三個實(shí)根,且它們之間的差不小于1。 算法分析:在講解枚舉法時,我們討論了如何用枚舉法求解此題,但如果求解的精度進(jìn)一步提高,使用枚舉法就無能為力了,在此我們再一次討論如何用二分法求解此題。 由題意知(i,i+1)中若有根,則只有一個根,我們枚舉根的值域中的每一個整數(shù)x(-100≤x≤100),設(shè)定搜索區(qū)間[x1,x2],其中x1=x,x2=x+1。若: ⑴f(x1)=0,則確定x1為f(x)的根; ⑵f(x1)*f(x2)<0,則確定根x在區(qū)間[x1,x2]內(nèi)。 ⑶f(x1)*f(x2)>0,則確定根x不在區(qū)間[x1,x2]內(nèi),設(shè)定[x2,x2+1]為下一個搜索區(qū)間; 若確定根x在區(qū)間[x1,x2]內(nèi),采用二分法,將區(qū)間[x1,x2]分成左右兩個子區(qū)間:左子區(qū)間[x1,x]和右子區(qū)間[x,x2](其中x=(x1+x2)/2)。如果f(x1)*f(x)≤0,則確定根在左區(qū)間[x1,x]內(nèi),將x設(shè)為該區(qū)間的右界值(x2=x),繼續(xù)對左區(qū)間進(jìn)行對分;否則確定根在右區(qū)間[x,x2]內(nèi),將x設(shè)為該區(qū)間的左界值(x1=x),繼續(xù)對右區(qū)間進(jìn)行對分; 上述對分過程一直進(jìn)行到區(qū)間的間距滿足精度要求為止(即x2-x1<0.005)。此時確定x1為f(x)的根。 源程序: {$N+} var x:integer; a,b,c,d,x1,x2,xx:extended; function f(x:extended):extended; begin f:=((a*x+b)*x+c)*x+d; end; begin read(a,b,c,d); for x:=-100 to 100 do begin x1:=x;x2:=x+1; if f(x1)=0 then write(x1:0:2, ) else if f(x1)*f(x2)<0 then begin while x2-x1>=0.005 do begin xx:=(x1+x2)/2; if f(x1)*f(xx)<=0 then x2:=xx else x1:=xx; end;{while} write(x1:0:2, ); end; {then} end;{for} end.- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 2019-2020年高中信息技術(shù) 全國青少年奧林匹克聯(lián)賽教案 分治法 2019 2020 年高 信息技術(shù) 全國青少年 奧林匹克 聯(lián)賽 教案 分治
鏈接地址:http://m.italysoccerbets.com/p-2618436.html