1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SKKN hiệu quả của chia để trị trong sắp xếp và tìm kiếm

41 295 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

S GIO DC V O TO H TNH TI: HIU QU CA CHIA TR TRONG SP XP V TèM KIM TC GI: NGUYN TH MINH NGUYT Trng : THPT Chuyờn H Tnh LNH VC: T NHIấN H Tnh, nm 2014 A đặt vấn đề Lý chọn đề tài: Trong tin hc, bi toỏn l mt vic no ú m ta mun mỏy tớnh thc hin, gii bi toỏn chỳng ta cn cú cỏc thut toỏn Thut toỏn l dóy hu hn cỏc thao tỏc c sp xp theo mt trỡnh t xỏc nh cho t input sau thc hin dóy thao tỏc ú ta thu c output cn tỡm ca bi toỏn Nh vy toán dùng nhiều thut toỏn để giải quyết, vấn đề chọn thut toỏn no hay phơng pháp phù hợp với kiểu để đạt hiệu cao Trong chng trinh Tin hc ph thụng núi v Chng trỡnh tin hc chuyờn sõu núi riờng ó cú mt s thut toỏn gii mt lp bi toỏn nht nh nh: cỏc thut toỏn Sp xp, tỡm kim v mt s phng phỏp thit k thut toỏn nh: Chia tr, tham lam, quy hoch ng T thc t ging dy ca bn thõn tụi nhn thy vic nm vng cỏc thut toỏn v ỏp dng nú mt cỏch linh hot cỏc bi nht nh l khụng n gin Sp xp v tỡm kim l hai bi toỏn rt quen thuc, rt nhiu hc sinh cú th ci t chng trỡnh sp xp hay tỡm kim mt cỏch d dng Tuy nhiờn cú th nhn dng mt bi toỏn cú th thc hin vi cỏc thut toỏn ny khụng phi d, ngoi ci t c thut toỏn hiu qu nht cng ũi hi ngi lp trỡnh nm vng cỏc phng phỏp thit k thut gii Trong thit k thut gii thỡ Chia tr (Divide and Conquer) l mt phng phỏp quen thuc s dng gii khỏ nhiu bi toỏn Chỳng ta cú th ỏp dng phng phỏp ny cỏc bi toỏn sp xp v tỡm kim Vi t tng chia tr chỳng ta cú th ci thin ỏng k phc ca thut toỏn cỏc bi toỏn sp xp v tỡm kim T tng chia tr sp xp v tỡm kim ó c vit nhiu ti kiu khỏc nhau, ti ny tụi trung a mt s dng bi t ph bin n khú cú th ỏp dng phng phỏp ny v phõn tớch tớnh hiu qu ca nú i vi tng bi toỏn Vỡ th tụi chn ti: Hiu qu ca chia tr sp xp v tỡm kim Mc ớch nghiờn cu Trong phm vi ti ca mỡnh tụi mun nghiờn cu mt s phng phỏp khụng phi mi nhng l cỏc phng phỏp khỏ hiu qu vic gii cỏc bi toỏn tin hc nhm giỳp hc sinh hỡnh thnh k nng gii bi toỏn tin hc v rốn luyn t thut toỏn t ú rốn luyn t lp trỡnh Cng qua ti, tụi mun cựng ng nghip trao i, trau di chuyờn mụn nhm gúp phn nõng cao trỡnh chuyờn mụn nghip v v kh nng m rng kin thc Vi bn thõn nghiờn cu ti sỏng kin kinh nghim l c hi tt nghiờn cu khoa hc lm quen vi phng phỏp lm khoa hc ch phm vi hp nhng tụi hy vng cựng vi n lc ca bn thõn v s giỳp ca ng nghip s cú nhng ti khoa hc tt, lý thỳ v hiu qu Nhiệm vụ nghiên cứu Giáo viên hon thành nội dung đề tài định hớng cho học sinh thực đề tài trình ụn v luyn thi hc sinh gii Bỏo cỏo thnh chuyờn cỏc ln hp t chuyờn mụn cựng ng nghip b sung nhng thiu sút ca ti Học sinh dới hớng dẫn Giáo viên nghiêm túc nghiên cứu đề tài có định hớng phát triển khả lập trình bn thõn Phạm vi đề tài: Đề tài đợc áp dụng học sinh khỏ v gii vi nhim v ch yu l ụn thi hc sinh gii v bi dng kin thc cho hc sinh yờu thớch mụn tin Phơng pháp nghiên cứu: Để hoàn thành đề tài này, tiến hành áp dụng số phơng pháp nghiên cứu sau: Phng phỏp t - gii quyt Phơng pháp phân tích tổng hợp Phơng pháp so sánh đối chiếu Phng phỏp thc nghim B GII QUYT VN I T tng chia tr (Divide and Conquer): Chia tr l mt t tng rt ph bin cuc sng v c ỏp dng rt hiu qu Tin hc T tng c bn ca phng phỏp chia tr l Ngi ta phõn bi toỏn thnh cỏc bi toỏn con, cỏc bi toỏn li tip tc c phõn thnh cỏc bi toỏn nh hn, c tip tc nh th cho n ta nhn c bi toỏn ó cú thut gii hoc cú th d dng a thut gii Sau ú kt hp nghim ca cỏc bi toỏn nhn c nghim ca bi toỏn ln hn cui cựng nhn c nghim ca bi toỏn cn gii Thụng thng cỏc bi toỏn c phõn chia l cựng dng vi bi toỏn ban u ch cú c ca chỳng l nh hn Thut toỏn chia tr cú th biu din bng mụ hỡnh quy nh sau: Procedure DivideConquer(A,x); //Tỡm nghim x ca bi toỏn A Begin If (A nh) then Solve(A) Else Begin Phõn A thnh cỏc bi toỏn A1, , Am; For i:=1 to m DivideConquer(Ai,xi); Kt hp nghim xi ca bi toỏn Ai c nghim ca bi toỏn A; End; End; Chỳng ta s nghiờn cu bi toỏn Thỏp H ni, l mt bi toỏn in hỡnh c gii bng phng phỏp chia tr thy c rừ hn t tng ca phng phỏp ny Vớ d Bi toỏn Thỏp H Ni Cú N a cú ng kớnh khỏc c t chng lờn theo th t gim dn ca ng kớnh tớnh t di lờn Cú ba v trớ cú th t cỏc a ỏnh s 1, 2, Chng a ban u c t v trớ 1: Cn chuyn c chng a t v trớ sang v trớ 2, theo nhng quy tc sau: Khi di chuyn mt a, phi t nú vo mt ba v trớ ó cho Mi ln ch cú th chuyn mt a v phi l a trờn cựng Ti mt v trớ, a no mi chuyn n s phi t lờn trờn cựng a ln hn khụng bao gi c phộp t lờn trờn a nh hn (hay núi cỏch khỏc: mt a ch c t trờn mt t hoc t trờn mt a ln hn) Bi toỏn ny cú ngun gc l mt truyn thuyt ca n rng cú mt nhúm cao tng n giỏo c giao trng trỏch chuyn dn 64 a vng gia cc kim cng theo cỏc iu kin ó núi phn trờn Khi no hon tt cụng vic, tc l chuyn xong ton b 64 a t v trớ ban u sang v trớ kt thỳc thỡ cng l thi im tn th Chỳng ta gii bi toỏn bng cỏch chia bi toỏn chuyn N a, t v trớ sang v trớ thnh ba bi toỏn n gin hn nh sau: Chuyn N-1 a trờn cựng t v trớ sang v trớ 3, dựng v trớ lm trung gian Chuyn a th N t v trớ sang v trớ Chuyn N-1 a t v trớ sang v trớ 2, dựng v trớ lm trung gian Chỳ ý rng bi toỏn v tng t nh bi toỏn ban u, ch khỏc l kớch thc nh hn Chỳng cng s c gii bng phng phỏp chia tr ging nh bi toỏn ban u D dng kim tra l gii nh vy chỳng tho cỏc iu kin Bi toỏn thỡ c gii rt n gin Thut toỏn c vit di dng gi mó nh sau: Procedure Hanoi; begin Move(n,1,2,3); end; Procedure Move(n,a,b,c); {chuyn n a, t v trớ a sang v trớ b, dựng v trớ c lm trung gian } begin if n=0 then exit; Move(n-1,a,c,b); writeln('Chuyn a ',n, ' t v trớ ',a, 'sang vi tri ',b); Move(n-1,c,b,a); end; Chng trỡnh Pascal: Program ThapHN; var n:integer; procedure move(n,a,b,c:integer); begin if n=0 then exit; move(n-1,a,c,b); writeln('Chuyen dia ',n,' tu vi tri ',a,' sang vi tri ',b); move(n-1,c,b,a); end; begin write('Nhap N = ');readln(n); move(n,1,2,3); readln end Chỳng ta hóy dng li mt chỳt phõn tớch phc tớnh toỏn Gi T(n) l s thao tỏc chuyn a cn thit chuyn xong n a Theo thut toỏn trờn ta cú: T(n) = T(n-1) + + T(n-1) Bng cỏc phng phỏp gii cụng thc truy hi ta cú c T(n) = n-1 p dng kt qu ny vi gi thit rng mi cao tng phi mt giõy chuyn xong mt a t cc ny sang cc kia, ta thy thi gian chuyn ton b 64 a vng l T(64)=216-1=18446744073709551615 giõy Nh vy ngy tn th (nu cú) theo truyn thuyt phi 600 t nm na mi n II Hiu qu ca Chia tr bi toỏn sp xp v tỡm kim Bi toỏn sp xp Bi toỏn: Cho dóy A gm N s nguyờn Sp xp dóy A thnh dóy khụng gim Bi toỏn sp xp l bi toỏn quen thuc v cú nhiu thut toỏn gii bi toỏn ny Cỏc thut toỏn Sp xp ni bt (Bubble Sort) hay chốn trc tip (Insertion Sort) u cú phc c O(n 2) Thut toỏn sp xp nhanh (Quick Sort) hay sp xp trn (Merge Sort) l hai thut toỏn sp xp theo t tng chia tr 0Vi t tng chia tr, Quick Sort v Merge Sort cho ta phc nh hn thng l O(nlogn) Trong ti ny tụi ch trung nghiờn cu thut toỏn QuickSort Chỳng ta xột thut toỏn sp xp nhanh (Quick Sort) í tng: T tng ca thut toỏn ny l chia tr, ta tỡm cỏch chia ụi dóy ban u bng cỏch chn mt phn t l cht (pivot) T dóy ban u, tt c phn t nh hn phn t cht thỡ a v bờn trỏi dóy; nhng phn t ln hn hoc bng cht thỡ a v bờn phi dóy Sau bc ny ta cú phn t cht l ng ỳng v trớ Dóy ban u c chia thnh hai dóy nm hai bờn cht Tip tc phõn chia cỏc dóy theo cỏch tng t cho n mi dóy u cú di bng Cú th chn phn t cht nm u, cui, gia dóy hoc chn ngu nhiờn mt phn t dóy Gii Thut: Trng hp sau chn cht l phn t gia dóy Sp xp mt on bt k X[L] X[R] vi iu kin LK thỡ Last=Mid-1, ri chuyn n bc 7; Bc 6: First=Mid+1; Bc 7: Nu First>Last thỡ thụng bỏo dóy A khụng cú s hng no bng K ri kt thỳc; Bc 8: Quay li bc 29 Thut toỏn tỡm kim nh phõn cú t tng gn ging vi thut toỏn sp xp nhanh Nú thc hin vic tỡm v trớ trung tõm, thụng qua phộp so sỏnh gia giỏ tr cn tỡm vi giỏ tr ti v trớ trung tõm quyt nh vựng d liu (trc hay sau v trớ trung tõm) m giỏ tr ú thuc v Vic tỡm kim s c th tip tc 1/2 hp d liu va xỏc nh vi cựng cỏch thc tỡm kim, cho ti giỏ tr ti v trớ trung tõm l giỏ tr cn tỡm hoc phm vi tỡm kim bng rng thỡ dng Vỡ sau mi bc tỡm kim d liu li gim i phõn na, s lng cỏc bc tỡm kim cng tng dn ti ti a l log2(N) Vỡ vy phc ca thut toỏn ny c xem l O(logN) Chỳng ta s xem cỏch ci t thut toỏn thụng qua vớ d sau: Bi toỏn ỏp dng: Bi Cho mt dóy gm N s nguyờn dng, xỏc nh xem cú tn ti hay khụng dóy liờn tip cú tng bng K hay khụng? Vi bi toỏn ny ta cú th thc hin bng cỏch duyt tt c cỏc dóy cú th cú t dóy N phn t v thc hin tớnh tng ca dóy ú ri so sỏnh vi K Gii thut cú th thc hin nh sau: For i:=1 to N Begin S:=0; For j:=i to N S:=S+A[j]; If s=k then begin write(tim thay);break; end; End; Thut toỏn trờn cho ta phc c O(n 2) Ta cú th ci tin thut toỏn bng nhn cỏch sau: - To dóy S ú Si=A1+ +Ai; - Nhn thy dóy A gm cỏc s nguyờn dng nờn dóy S l tng dn - xỏc nh on [Ai,Aj] cú tng cỏc phn t bng K hay khụng ta thc hin tỡm kim nh phõn trờn on t v trớ i n v trớ j dóy S m Sj-Si=K 30 Gii thut nh sau: Bc To dóy S t dóy A: S[0]:=0; Vi mi i nhn giỏ tr t n n lm S[i]:=S[i-1]+A[i]; Bc Res=-1; {Res dựng ỏnh du v trớ cui ca dóy cn tỡm} Bc Vi mi i nhn giỏ tr t n N lm: 3.1 Cho first:=i; last:=n; 3.2 chng no firstk thỡ last:=mid-1; first:=mid+1; 3.3 Nu Res-1 thỡ a dóy cn tỡm l dóy A i+1 n ARes V kt thỳc Bc a kt lun khụng tỡm thy v kt thỳc Chng trỡnh: {$OBJECT FPC} const nmax=100000; var n,k:longint; a:array[1 nmax]of longint; s:array[0 nmax]of longint; procedure var enter; i:longint; begin write('n= '); readln(n); write('k= '); readln(k); fillchar(s,sizeof(s),0); for i:=1 to n 31 begin write('a[',i,']= '); readln(a[i]); s[i]:=s[i-1]+a[i]; end; end; procedure var main; first,mid,last,i,res,id:longint; begin res:=-1; for i:=0 to n-1 begin first:=i; last:=n; while firstk then last:=mid-1 else first:=mid+1; end; if res-1 then begin write('day la: ',i+1,' ',res); break; end; 32 end; end; BEGIN enter; main; readln END ỏnh giỏ phc ca thut toỏn: Ta thy thi gian thc hin thut toỏn trờn bng tng thi gian thc hin ca chng trỡnh Enter (c O(n)) v chng trỡnh main; Do vic tỡm ch s res ch thc hin trờn na dóy A i n An (vi i= n n) nờn chng trỡnh main cú phc c O(nlogn) Vy thut toỏn gii bi toỏn trờn cú phc c O(nlogn) Thut toỏn ny cũn cú th ci tin phc c O(n) chỳng ta s xem xột ny chuyờn khỏc Nhng vi t tng chia tr v thut toỏn tỡm kim nh phõn chỳng ta thy phc ca thut toỏn c ci thin phn no Bi toỏn tỡm kim nh phõn cú u vo l cỏc dóy ó sp xp nờn mt s bi cú s k tha t thut toỏn sp xp Trong lp trỡnh ta cú th gp cỏc bi toỏn cn thc hin cỏc thao tỏc chốn hoc xúa cỏc phn t khụng thừa dóy ó cho Chỳng ta s tỡm hiu k thut chốn phn t vo dóy v xúa phn t dóy qua cỏc bi sau: Bi 2: Cho dóy A gm N s nguyờn a 1, ,an ó c sp xp theo th t khụng gim v mt khúa K Hóy chốn khúa K vo dóy A cho dóy ú m bo th t khụng gim í tng: Ta cn xỏc nh v trớ vt chốn khúa K Thc hin tỡm kim nh phõn trờn dóy A tỡm v trớ vt thừa a vtK y cỏc phn t t vt n n lựi xung mt v trớ t a vt=K Tng n lờn n v Chng trỡnh 33 {$OBJECT FPC} program chen; const nmax=100001; var a:array[1 nmax]of longint; n,k,vt,i:longint; procedure var enter; i:longint; begin write('n,k '); readln(n,k); //nhap day tang dan for i:=1 to n begin write('a[',i,']= '); readln(a[i]); end; end; procedure var main; first,mid,last,i:longint; begin first:=1; last:=n; if Ka[n] then vt:=n+1 else while firsttrunc(sqrt(x))); end; procedure var main; first,mid,last,vt,i:longint; begin first:=1; 36 last:=j; while firstK then first:=mid+1 else last:=mid-1; end; for i:=vt to j a[i]:=a[i+1]; dec(j); end; begin write('nhap n,k: ');readln(n,k); j:=0; for i:=1 to n if nt(i) then begin inc(j);a[j]:=i;end; Writeln('Day so nguyen to la: '); For i:=1 to j write(a[i],' '); writeln; main; writeln(vt); Writeln('Day nguyen to sau xoa ',K,' la: '); For i:=1 to j write(A[i],' '); readln end 37 38 C KT LUN V KIN NGH Qua cỏc phn trờn chỳng ta ó thy c phn no hiu qu ca phng phỏp chia tr Chỳng ta cú th thy c tớnh ỳng ca thut toỏn ny th hin: Chia tr s dng k thut quy, thụng thng l quy nhiu nhỏnh; Tớnh ỳng ca thut toỏn Chia tr cú th c chng minh nh i vi gii thut quy (s dng quy np) hoc cú th s dng bt bin vũng lp Trong gii hn ti chỳng ta khụng cp ny Mt s cn lu ý s dng phng phỏp Chia tr l: - Li gi qui trờn nhiu bi toỏn, nhiu ln cú th dn ti hin tng trn vựng nh m - Cn cú chin lc phõn ró hp lý d liu m bo thut gii tt nht - Hn ch thng gp ca thut toỏn Chia tr: Vic phõn ró cú th dn ti mt s cỏc bi toỏn trựng Sp xp v tỡm kim l hai bi toỏn thng gp, cựng mt bi toỏn nh nhng cú nhiu phng phỏp gii quyt khỏc Khụng th thụng qua mt s vớ d c th m ỏnh giỏ thut toỏn ny tt hn thut toỏn v mi mt Vic chn thut toỏn thớch hp cho phự hp vi tng yờu cu, iu kin c th l k nng ca ngi lp trỡnh QuickSort v MergeSort l nhng thut toỏn sp xp tng quỏt, dóy khúa thuc kiu d liu cú th t no cng cú th ỏp dng c ch khụng nht thit phi l cỏc s Tuy cỏc phng phỏp ny cú mt s trng hp suy bin nhiờn nhng im ny nh so vi u im chung ca chỳng l nhanh Tỡm kim nh phõn ch cú th thc hin trờn mt dóy ó c sp xp Nhng nu iu kin v u vo thừa hoc chỳng ta cú th bin i u vo mt cỏch hp lý thỡ vic tỡm kim s c thc hin nhanh hn 39 Nhng thut toỏn trờn khụng ch n thun cho ta tỡm hiu thờm v mt cỏch gii bi toỏn, m cỏch ci t chỳng cng cho ta thờm nhiu kinh nghim v cỏc k thut lp trỡnh nh: Chốn, xúa phn t dóy; "Chia tr" v hiu qu ca nú mt s bi toỏn c th Trong quỏ trỡnh ging dy ca bn thõn tụi nhn thy vic t nghiờn cu l mt nhng cụng vic ht sc quan trng Thc hin cỏc ti v lm sỏng kin kinh nghim l mt nhng c hi hc tt cho bn thõn.Trong quỏ trỡnh thc hin v thc nghim s giỳp bn thõn nhn c rt nhiu kin thc, kinh nghim phc v qỳa trỡnh ging dy v hc Trong ti ca mỡnh tụi ó c gng a c mt s dng bi thng gp s dng thut toỏn sp xp v tỡm kim theo t tng chia tr mong rng s giỳp ớch cho giỏo viờn v hc sinh quỏ trỡnh ging dy v hc Do thi gian cú hn nờn ni dung ti chc chn cũn nhiu thiu sút, rt mong nhn c phn hi gúp ý t ng nghip cú th hon thin hn v ỏp dng ti vo ging dy 40 MC LC Trang A T VN Lý chn ti Mc ớch nghiờn cu Nhim v nghiờn cu 4 Phm vi ti Phng phỏp nghiờn cu B GII QUYT VN I T tng chia tr II Hiu qu ca chia tr sp xp v tỡm kim Bi toỏn sp xp Bi toỏn tỡm kim 24 C KT LUN V KIN NGH 32 Ti kiu tham kho Ti liu giỏo khoa chuyờn tin quyn Tỏc gi H S m (Ch biờn) c ụng Lờ Minh Hong Nguyn Thanh Tựng Nh xut bn Giỏo dc Vit Nam 2009 Gii thut v lp trỡnh Tỏc gi Lờ Minh Hong Nh xut bn i hc S phm H Ni 2002 thi Hc sinh gii tnh, thi chn d tuyn Quc gia ca mt s tnh 41 ... output cn tỡm ca bi toỏn Nh vy toán dùng nhiều thut toỏn để giải quyết, vấn đề chọn thut toỏn no hay phơng pháp phù hợp với kiểu để đạt hiệu cao Trong chng trinh Tin hc ph thụng núi v Chng trỡnh tin... thut gii Trong thit k thut gii thỡ Chia tr (Divide and Conquer) l mt phng phỏp quen thuc s dng gii khỏ nhiu bi toỏn Chỳng ta cú th ỏp dng phng phỏp ny cỏc bi toỏn sp xp v tỡm kim Vi t tng chia. .. phỏp thc nghim B GII QUYT VN I T tng chia tr (Divide and Conquer): Chia tr l mt t tng rt ph bin cuc sng v c ỏp dng rt hiu qu Tin hc T tng c bn ca phng phỏp chia tr l Ngi ta phõn bi toỏn thnh

Ngày đăng: 01/11/2017, 10:40

Xem thêm: SKKN hiệu quả của chia để trị trong sắp xếp và tìm kiếm

Mục lục

    1. Lý do chän ®Ò tµi:

    1. Bài toán sắp xếp

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w