Merge txheeb: algorithm, zoo thiab nta

Cov txheej txheem:

Merge txheeb: algorithm, zoo thiab nta
Merge txheeb: algorithm, zoo thiab nta
Anonim

Merge txheeb yog ib qho ntawm cov khoos phis tawj thev naus laus zis thev naus laus zis, tsim rov qab rau xyoo 1945 los ntawm tus lej lej John von Neumann. Thaum koom nrog Manhattan Project, Neumann tau ntsib nrog qhov xav tau kom ua tiav cov ntaub ntawv loj heev. Txoj kev nws tau tsim siv lub hauv paus ntsiab lus ntawm "sib faib thiab kov yeej", uas txo lub sijhawm ua haujlwm tau zoo.

Txoj cai thiab kev siv cov algorithm

Txoj kev sib koom ua ke yog siv rau hauv cov teeb meem ntawm kev txheeb xyuas cov qauv uas tau txiav txim nkag mus rau cov ntsiab lus, xws li arrays, npe, ntws.

Thaum ua tiav, thawj cov ntaub ntawv thaiv tau muab faib ua cov khoom me me, mus txog rau ib lub caij, uas qhov tseeb yog twb tau txheeb npe. Ces nws yog reassembled nyob rau hauv qhov kev txiav txim.

Sib koom ua ke
Sib koom ua ke

Sorting ib array ntawm ib tug ntev npaum li cas yuav tsum tau ib tug ntxiv nco cheeb tsam ntawm tib qhov loj, nyob rau hauv uas cov sorted array yog sau nyob rau hauv qhov chaw.

Txoj kev siv tau los xaj cov ntaub ntawv sib piv, xws li cov lej lossis cov hlua.

Merge sortedzaj

kom nkag siab txog algorithm, cia peb pib nws qhov kev tshuaj ntsuam los ntawm qhov kawg - los ntawm cov txheej txheem ntawm kev sib koom ua ke ntawm cov blocks.

Cia li xav tias peb muaj ob arrays ntawm cov zauv txheeb nyob rau hauv txhua txoj kev uas yuav tsum tau muab sib xyaw ua ke kom cov sorting tsis tawg. Rau qhov yooj yim, peb yuav txheeb cov lej hauv kev nce qib.

piv txwv theem pib: ob qho arrays muaj ib lub ntsiab lus txhua.


int arr1={31}; int arr2={18};

txhawm rau muab lawv sib koom ua ke, koj yuav tsum coj tus lej xoom ntawm thawj array (tsis txhob hnov qab tias tus lej pib ntawm xoom) thiab xoom lub caij ntawm qhov thib ob array. Cov no yog, feem, 31 thiab 18. Raws li kev txheeb xyuas, tus lej 18 yuav tsum yog thawj zaug, vim nws tsawg dua. Cia li muab cov lej tso rau hauv qhov kev txiav txim kom raug:


int result={18, 31};

Cia peb saib cov piv txwv nyuaj dua, qhov twg txhua qhov array muaj ob peb lub ntsiab lus:


int arr1={2, 17, 19, 45}; int arr2={5, 6, 21, 30};

Qhov kev sib koom ua ke algorithm yuav suav nrog kev sib piv cov khoom me me thiab muab tso rau hauv cov txiaj ntsig tau los ntawm qhov raug. Txhawm rau khaws cov ntsuas tam sim no, cia peb qhia ob qhov sib txawv - index1 thiab index2. Thaum pib, peb muab lawv tso rau xoom, txij li cov arrays raug txheeb xyuas, thiab cov ntsiab lus me tshaj yog thaum pib.


int index1=0; int index2=0;

Cia sau tag nrho cov txheej txheem kev sib koom ua ke ib kauj ruam:

  1. Nqa lub caij nrog index1 los ntawm array arr1, thiab lub caij nrog index2 los ntawm array arr2.
  2. Sib piv, xaiv qhov tsawg tshaj plaws ntawm lawv thiab muab tso rau hauvresulting array.
  3. nce qhov ntsuas tam sim no ntawm cov khoom me me los ntawm 1.
  4. Txuas ntxiv ntawm thawj kauj ruam.
Sib koom ua ke arrays
Sib koom ua ke arrays

Nyob rau thawj lub orbit, qhov xwm txheej yuav zoo li no:


index1=0; index2=0; arr1[0]=2; arr2[0]=5; arr1[0] < arr2[0]; index1++; result[0]=arr1[0]; // result=[2]

Ntawm thib ob:


index1=1; index2=0; arr1[1]=17; arr2[0]=5; arr1[1] > arr2[0]; index2++; result[1]=arr2[0]; // result=[2, 5]

Third:


index1=1; index2=1; arr1[1]=17; arr2[1]=6; arr1[1] > arr2[1]; index2++; result[2]=arr2[1]; // result=[2, 5, 6]

Thiab li ntawd, kom txog rau thaum qhov tshwm sim yog ib qho kev txheeb xyuas tag nrho: {2, 5, 6, 17, 21, 19, 30, 45}.

Qee qhov teeb meem tuaj yeem tshwm sim yog tias cov arrays nrog qhov ntev sib txawv raug muab ua ke. Yuav ua li cas yog tias ib qho ntawm cov kev ntsuas tam sim no tau mus txog lub caij kawg, thiab tseem muaj cov tswv cuab nyob hauv qhov thib ob?


int arr1={1, 4}; int arr2={2, 5, 6, 7, 9}; // 1 kauj ruam index1=0, index2=0; 1 2 tau={1, 2}; // 3 kauj ruam index1=1, index2=1; 4 < 5 result={1, 2, 4}; //4 kauj ruam index1=2, index2=1 ??

Tus index1 sib txawv tau mus txog tus nqi 2, tab sis arr1 array tsis muaj ib qho khoom nrog qhov ntsuas ntawd. Txhua yam yooj yim ntawm no: tsuas yog hloov cov khoom seem ntawm qhov thib ob array mus rau qhov tshwm sim, khaws cia lawv cov xaj.


result={1, 2, 4, 5, 6, 7, 9};

qhov xwm txheej no qhia rau peb xav tauphim qhov ntsuas ntsuas tam sim no nrog qhov ntev ntawm cov array raug muab sib xyaw.

Merge scheme rau xaj sequences (A thiab B) ntawm qhov ntev sib txawv:

  • Yog tias qhov ntev ntawm ob qhov sib txuas ntau dua 0, piv A[0] thiab B[0] thiab txav tus me dua mus rau qhov tsis.
  • Yog tias qhov ntev ntawm ib qho ntawm cov kab ke yog 0, coj cov khoom seem ntawm qhov thib ob thiab, yam tsis hloov lawv qhov kev txiav txim, txav mus rau qhov kawg ntawm qhov tsis.

Kev ua raws theem ob

Ib qho piv txwv ntawm kev koom nrog ob qhov kev txheeb cais hauv Java yog muab hauv qab no.


int a1=new int {21, 23, 24, 40, 75, 76, 78, 77, 900, 2100, 2200, 2300, 2400, 2500}; int a2=new int {10, 11, 41, 50, 65, 86, 98, 101, 190, 1100, 1200, 3000, 5000}; int a3=new int[a1.length + a2.length]; int i=0, j=0; rau (int k=0; k a1.length-1) { int a=a2[j]; a3[k]=ib; j++; } else if (j > a2.length-1) { int a=a1; a3[k]=ib; i++; } else if (a1 < a2[j]) { int a=a1; a3[k]=ib; i++; } else { int b=a2[j]; a3[k]=ib; j++; } }

Here:

  • a1 thiab a2 yog cov thawj txheeb cov arrays los muab merged;
  • a3 – zaum kawg array;
  • i thiab j yog qhov ntsuas ntawm cov ntsiab lus tam sim no rau arrays a1 thiab a2.

Thawj thiab thib ob yog tias cov xwm txheej ua kom cov indexes tsis dhau qhov loj ntawm cov array. Qhov thib peb thiab thib plaub mob blocks, ntsig txog, raug hloov mus rau qhov tshwm sim ntawm cov khoom me me.

Merge cov hlua
Merge cov hlua

Sib faib thiab kov yeej

Yog li, peb tau kawm los sib sau ua kecov khoom muaj nqis. Nws tuaj yeem hais tias qhov thib ob ntawm kev sib koom ua ke algorithm - kev sib koom ua ke nws tus kheej - twb tau txheeb.

Txawm li cas los xij, koj tseem yuav tsum nkag siab tias yuav ua li cas los ntawm tus lej qub uas tsis tau txheeb xyuas cov lej mus rau ntau qhov sib cais uas tuaj yeem sib sau ua ke.

Cia peb xav txog thawj theem ntawm algorithm thiab kawm yuav ua li cas cais arrays.

Qhov no tsis yooj yim - thawj daim ntawv teev cov txiaj ntsig tau muab faib ua ib nrab, tom qab ntawd txhua ntu kuj tau muab faib ua, thiab lwm yam kom txog thaum tau txais cov blocks me me.

Qhov ntev ntawm cov ntsiab lus tsawg tsawg tuaj yeem sib npaug rau ib qho, uas yog, lawv tuaj yeem ua lawv tus kheej ua ib pawg, tab sis qhov no tsis yog qhov tsim nyog. Qhov loj ntawm qhov thaiv tau txiav txim siab ua ntej, thiab txhua qhov tsim nyog sorting algorithm uas ua haujlwm zoo nrog cov arrays me me (piv txwv li, quicksort lossis insertion sort) tuaj yeem siv los xaj nws.

Zoo li no.


// thawj array {34, 95, 10, 2, 102, 70}; // thawj faib {34, 95, 10} thiab {2, 102, 70}; // thib ob faib {34} thiab {95, 10} thiab {2} thiab {102, 70}

Qhov tshwm sim, muaj 1-2 lub ntsiab lus, yooj yim heev rau kev npaj.

Tom qab ntawd, koj yuav tsum tau sib sau ua ke cov arrays me me uas twb tau muab tso ua ke, khaws cia cov kev txiav txim ntawm cov tswv cuab, uas peb twb tau kawm ua.

Scheme rau sorting ib array los ntawm merge
Scheme rau sorting ib array los ntawm merge

Kev ua thawj theem

Recursive partitioning ntawm ib qho array yog qhia hauv qab no.


void mergeSort(T a, pib ntev, ntev tiav) {ntev phua; yog(pib < tas) { split=(pib + tiav)/2; mergeSort(a, pib, faib); mergeSort(a, faib + 1, tiav); merge (a, pib, phua, tiav); } }

Yuav ua li cas hauv qhov chaws no:

  1. Qhov kev sib koom ua ke tau txais qhov pib array

    a

    thiab sab laug thiab sab xis ciam teb ntawm thaj av kom raug txheeb xyuas (qhov ntsuas pib thiab

  2. finish).
  3. Yog qhov ntev ntawm ntu no ntau dua ib qho (

    pib < tiav

    ), ces nws muab faib ua ob ntu (los ntawm qhov ntsuas

  4. split), thiab txhua tus yog recursively sorted.
  5. Nyob rau hauv lub luag haujlwm recursive hu rau sab laug, qhov pib qhov ntsuas ntawm cov phiaj xwm thiab qhov ntsuas

    split

    tau dhau. Rau qhov yog, raws li, qhov pib yuav yog

  6. (split + 1), thiab qhov kawg yuav yog qhov ntsuas kawg ntawm ntu thawj.
  7. Function

    merge

    tau txais ob qhov kev txiav txim ua ntu zus (

    a[pib]…a[split]

    thiab

  8. a[plit] +1]…a[tiav) thiab sib koom ua ke hauv kev txiav txim.

Tus neeg kho tshuab ntawm kev sib koom ua ke tau tham saum toj no.

txheej txheem dav dav ntawm algorithm

Txoj kev sib koom ua ke array muaj ob kauj ruam loj:

  • Split lub unsorted thawj array rau hauv me me daim.
  • Caw lawv ua khub, ua raws li txoj cai sorting.

Ib txoj haujlwm loj thiab nyuaj tau tawg ua ntau yam yooj yim, uas tau ua raws li kev daws teeb meem, ua rau qhov xav tau.

Kev sib koom ua ke algorithm
Kev sib koom ua ke algorithm

Kev ntsuas kev ntsuas

Lub sijhawm nyuaj ntawm kev sib koom ua ke yog txiav txim siab los ntawm qhov siab ntawm tsob ntoo sib caisalgorithm thiab sib npaug ntawm cov ntsiab lus hauv array (n) lub sij hawm nws lub logarithm (log n). Qhov kev kwv yees li no hu ua logarithmic.

Qhov no yog qhov zoo thiab qhov tsis zoo ntawm txoj kev. Nws lub sijhawm khiav tsis hloov txawm tias qhov phem tshaj plaws, thaum tus thawj array raug txheeb xyuas rov qab. Txawm li cas los xij, thaum ua tiav cov ntaub ntawv txheeb xyuas tag nrho, lub algorithm tsis muab lub sijhawm nce.

Nws tseem ceeb heev kom nco ntsoov tus nqi ntawm kev sib koom ua ke. Lawv sib npaug rau qhov loj ntawm cov khoom qub. Hauv cheeb tsam ntxiv no, ib qho kev txheeb cais tau sib sau los ntawm cov khoom.

Kev ua raws li cov txheej txheem

Pascal kev sib koom ua ke yog qhia hauv qab no.


txheej txheem MergeSort(npe: hlua; var f: ntawv); Var a1, a2, s, i, j, kol, tmp: integer; f1,f2: lus. b:kub Begincol:=0; Assign(f, npe); rov pib dua(f); Thaum tsis EOF(f) pib nyeem (f, a1); inc(col); kawg; kaw (f); Assign(f1, '{npe ntawm 1st auxiliary file}'); Assign(f2, '{npe ntawm 2nd auxiliary file}'); s:=1; Thaum (s<kol) pib Reset(f); rewrite(f1); rewrite(f2); Rau i:=1 rau kol div 2 pib Read(f, a1); Sau(f1, a1, ' '); kawg; Yog hais tias (kol div 2) mod s0 ces pib tmp:=kol div 2; Thaum tmp mod s0 pib nyeem (f, a1); Sau(f1, a1, ' '); inc(tmp); kawg; kawg; Thaum tsis EOF(f) pib Read(f, a2); Sau(f2, a2, ' '); kawg; kaw (f); kaw (f1); kaw (f2); rewrite(f); rov pib dua (f1); rov pib dua (f2); Nyeem (f1, a1); Nyeem (f2, a2); Thaum (tsis yog EOF(f1)) thiab (tsis yog EOF(f2)) pib i:=0; j: 0;ua. b:=yog; Thaum (b) thiab (tsis yog EOF(f1)) thiab (tsis yog EOF(f2)) pib Yog (a1<a2) ces pibSau(f, a1, ' '); Nyeem (f1, a1); inc(i); Xaus lwm pib Sau(f, a2, ' '); Nyeem (f2, a2); inc(j); kawg; Yog (i=s) lossis (j=s) ces b:=false; kawg; Yog tias tsis yog b ces pib Thaum (i<s) thiab (tsis yog EOF(f1)) pib Sau(f, a1, ' '); Nyeem (f1, a1); inc(i); kawg; Thaum (j<s) thiab (tsis yog EOF(f2)) pib Sau(f, a2, ' '); Nyeem (f2, a2); inc(j); kawg; kawg; kawg; Thaum tsis EOF(f1) pib tmp:=a1; Nyeem (f1, a1); Yog tsis yog EOF(f1) ces Sau(f, tmp, ' ') else Write(f, tmp); kawg; Thaum tsis EOF(f2) pib tmp:=a2; Nyeem (f2, a2); Yog tsis yog EOF(f2) ces Sau(f, tmp, ' ') else Write(f, tmp); kawg; kaw (f); kaw (f1); kaw (f2); s:=s2; kawg; lwv(f1); lwv(f2); End;

Visually, kev khiav hauj lwm ntawm lub algorithm zoo li no (sab saum toj - unordered sequence, hauv qab - xaj).

Insertion sort visualization
Insertion sort visualization

External data sorting

Ntau zaus yuav tsum tau txheeb qee cov ntaub ntawv nyob hauv lub cim xeeb sab nraud ntawm lub khoos phis tawj. Qee zaum, lawv muaj qhov loj me thiab tsis tuaj yeem muab tso rau hauv RAM kom yooj yim nkag mus rau lawv. Rau cov xwm txheej zoo li no, siv cov txheej txheem cais tawm sab nraud.

Qhov xav tau nkag mus rau cov xov xwm sab nraud degrades ua lub sijhawm ua haujlwm tau zoo.

Qhov nyuaj ntawm kev ua haujlwm yog qhov algorithm tsuas tuaj yeem nkag mus rau ib qho ntawm cov ntaub ntawv ntws ntawm ib lub sijhawm. Thiab nyob rau hauv cov ntaub ntawv no, ib qho ntawm cov txiaj ntsig zoo tshaj plaws yog pom los ntawm txoj kev sib koom ua ke, uas tuaj yeem sib piv cov ntsiab lus ntawm ob cov ntaub ntawv sib txuas ib qho tom qab lwm qhov.

Nyeem cov ntaub ntawv los ntawmsab nraud qhov chaw, lawv ua thiab sau ntawv mus rau cov ntaub ntawv kawg yog nqa tawm nyob rau hauv txiav txim blocks (series). Raws li txoj hauv kev ua haujlwm nrog qhov loj ntawm cov xaj xaj, muaj ob hom kev xaiv: yooj yim thiab ntuj sib xyaw.

Sab nraud kev sib koom ua ke
Sab nraud kev sib koom ua ke

Kev sib koom ua ke yooj yim

Nrog kev sib koom ua ke yooj yim, lub koob ntev yog tsau.

Yog li, hauv thawj cov ntaub ntawv tsis txheeb, tag nrho cov koob muaj ib lub caij. Tom qab thawj kauj ruam, qhov loj yuav nce mus rau ob. Tom ntej no - 4, 8, 16 thiab lwm yam.

Nws ua haujlwm zoo li no:

  1. Cov ntaub ntawv (f) muab faib ua ob pab pawg - f1, f2.
  2. Lawv rov muab tso rau hauv ib daim ntawv (f), tab sis tib lub sij hawm tag nrho cov ntsiab lus tau muab piv rau hauv khub thiab daim ntawv ua khub. Qhov loj me ntawm cov kauj ruam no dhau los ua ob.
  3. Kauj Ruam 1 rov ua dua.
  4. Kauj Ruam 2 rov ua dua, tab sis qhov twb tau txiav txim 2s tau muab tso rau hauv daim ntawv txheeb 4s.
  5. Lub voj txuas ntxiv, nce cov koob ntawm txhua qhov rov ua dua, kom txog thaum tag nrho cov ntaub ntawv raug txheeb.

Yuav ua li cas koj thiaj paub tias cov txheej txheem sab nrauv nrog kev sib koom ua ke yooj yim ua tiav?

  • tshiab series ntev (tom qab sib koom ua ke) tsis tsawg dua li tag nrho cov ntsiab lus;
  • tseem tshuav ib ntus;
  • Auxiliary file f2 was left empty.

Qhov tsis zoo ntawm kev sib koom ua ke yooj yim yog: txij li qhov kev khiav ntev tau kho ntawm txhua qhov kev sib koom ua ke, cov ntaub ntawv txiav txim ib nrab yuav siv sijhawm ntev los ua cov ntaub ntawv ua tiav tas li.

Natural fusion

Txoj kev no tsis txwv qhov ntevseries, tab sis xaiv qhov siab tshaj plaws ua tau.

Sorting algorithm:

  1. Nyeem qhov pib ua ntu zus los ntawm cov ntaub ntawv f. Thawj qhov khoom tau txais yog sau rau hauv cov ntaub ntawv f1.
  2. Yog tias qhov nkag tom ntej no txaus siab rau qhov kev txheeb xyuas, nws tau sau rau ntawd, yog tias tsis yog, ces mus rau qhov thib ob pab ntaub ntawv f2.
  3. Ua li no, tag nrho cov ntaub ntawv ntawm cov ntaub ntawv tau muab faib, thiab ib qho kev txiav txim ua ntu zus yog tsim nyob rau hauv f1, uas txiav txim siab qhov loj me tam sim no ntawm koob.
  4. Cov ntaub ntawv f1 thiab f2 raug sib koom ua ke.
  5. Lub voj voog rov ua dua.

Vim qhov tsis yog qhov loj ntawm cov koob, nws yog qhov tsim nyog los kos qhov kawg ntawm cov kab ke nrog cov cim tshwj xeeb. Yog li ntawd, thaum sib koom ua ke, tus naj npawb ntawm kev sib piv nce. Tsis tas li ntawd, qhov loj ntawm ib qho ntawm cov ntaub ntawv pabcuam yuav nyob ze rau qhov loj ntawm qhov qub.

Ntawm qhov nruab nrab, kev sib koom ua ke ntuj yog qhov ua tau zoo dua li kev sib koom ua ke nrog lwm hom.

Txoj kev ntawm lub algorithm

Thaum muab piv ob qhov txiaj ntsig zoo ib yam, txoj kev khaws cia lawv qhov kev txiav txim qub, uas yog, nws ruaj khov.

Cov txheej txheem kev txheeb xyuas tuaj yeem ua tiav zoo sib faib ua ntau txoj xov.

Image
Image

Cov yeeb yaj kiab qhia meej meej txog kev ua haujlwm ntawm kev sib koom ua ke algorithm.

Pom zoo: