Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Kaabo, Habr! Mo ṣafihan itumọ nkan naa si akiyesi rẹ
"Bawo ni aaye data ibatan ṣe n ṣiṣẹ".

Nigba ti o ba de si awọn data data ibatan Emi ko le ṣe iranlọwọ ṣugbọn ro pe nkan kan sonu. Wọn ti wa ni lilo nibikibi. Ọpọlọpọ awọn apoti isura infomesonu ti o wa, lati SQLite kekere ati iwulo si Teradata alagbara. Ṣugbọn awọn nkan diẹ ni o wa ti o ṣalaye bi data data ṣe n ṣiṣẹ. O le wa fun ararẹ nipa lilo “howdoesarelationaldatabasework” lati rii bii awọn abajade diẹ ti wa. Pẹlupẹlu, awọn nkan wọnyi jẹ kukuru. Ti o ba n wa awọn imọ-ẹrọ buzzy tuntun (BigData, NoSQL tabi JavaScript), iwọ yoo wa awọn nkan ti o jinlẹ diẹ sii ti n ṣalaye bi wọn ṣe n ṣiṣẹ.

Njẹ awọn apoti isura infomesonu ibatan ti dagba ati alaidun pupọ lati ṣe alaye ni ita awọn iṣẹ ile-ẹkọ giga, awọn iwe iwadii ati awọn iwe bi?

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Gẹgẹbi olupilẹṣẹ, Mo korira lilo nkan ti Emi ko loye. Ati pe ti o ba ti lo awọn apoti isura infomesonu fun diẹ sii ju ọdun 40, idi kan gbọdọ wa. Ni awọn ọdun, Mo ti lo awọn ọgọọgọrun awọn wakati lati loye nitootọ awọn apoti dudu ajeji ajeji ti MO lo lojoojumọ. Awọn apoti isura infomesonu ibatan gan awon nitori won da lori wulo ati reusable agbekale. Ti o ba nifẹ si agbọye data data kan, ṣugbọn ti ko ni akoko tabi itara lati ṣawari sinu koko ọrọ gbooro yii, o yẹ ki o gbadun nkan yii.

Botilẹjẹpe akọle nkan yii jẹ kedere, idi ti nkan yii kii ṣe lati loye bi o ṣe le lo aaye data. Nítorí náà, o yẹ ki o ti mọ tẹlẹ bi o ṣe le kọ ibeere asopọ ti o rọrun ati awọn ibeere ipilẹ RAW; bibẹkọ ti o le ko ye yi article. Iyẹn nikan ni ohun ti o nilo lati mọ, Emi yoo ṣalaye iyoku.

Emi yoo bẹrẹ pẹlu diẹ ninu awọn ipilẹ imọ-ẹrọ kọnputa, gẹgẹbi idiju akoko ti awọn algoridimu (BigO). Mo mọ diẹ ninu awọn ti o korira yi Erongba, ṣugbọn laisi rẹ o yoo ko ni anfani lati ni oye awọn intricacies inu awọn database. Niwọn bi eyi jẹ koko-ọrọ nla, Emi yoo dojukọ ohun ti Mo ro pe o ṣe pataki: bawo ni awọn ilana data data SQL ṣe iwadi. Emi yoo kan ṣafihan ipilẹ database agbekalenitorinaa ni ipari nkan naa o ni imọran ohun ti n ṣẹlẹ labẹ hood.

Niwọn igba ti eyi jẹ nkan gigun ati imọ-ẹrọ ti o kan ọpọlọpọ awọn algoridimu ati awọn ẹya data, ya akoko rẹ lati ka nipasẹ rẹ. Diẹ ninu awọn agbekale le jẹ soro lati ni oye; o le foju wọn ki o tun gba imọran gbogbogbo.

Fun oye diẹ sii laarin yin, nkan yii ti pin si awọn ẹya mẹta:

  • Akopọ ti kekere-ipele ati ki o ga-ipele database irinše
  • Akopọ ti Ilana Imudara Ibeere
  • Akopọ ti Idunadura ati Buffer Pool Management

Pada si Awọn ipilẹ

Awọn ọdun sẹyin (ninu galaxy kan ti o jinna, ti o jinna…), awọn olupilẹṣẹ ni lati mọ deede nọmba awọn iṣẹ ṣiṣe ti wọn ṣe ifaminsi. Wọn mọ awọn algoridimu wọn ati awọn ẹya data nipasẹ ọkan nitori wọn ko le ni anfani lati padanu Sipiyu ati iranti ti awọn kọnputa ti o lọra.

Ni apakan yii, Emi yoo leti diẹ ninu awọn imọran wọnyi bi wọn ṣe pataki lati ni oye data data naa. Emi yoo tun ṣafihan ero naa database atọka.

O(1) vs O(n2)

Lasiko yi, ọpọlọpọ awọn Difelopa ko bikita nipa awọn akoko complexity ti aligoridimu ... ati awọn ti wọn tọ!

Ṣugbọn nigba ti o ba n ṣe pẹlu ọpọlọpọ data (Emi ko sọrọ awọn ẹgbẹẹgbẹrun) tabi ti o ba n tiraka ni awọn iṣẹju-aaya, o di pataki lati ni oye imọran yii. Ati bi o ṣe le fojuinu, awọn apoti isura infomesonu ni lati koju awọn ipo mejeeji! Emi kii yoo jẹ ki o lo akoko diẹ sii ju pataki lati gba aaye naa kọja. Eyi yoo ṣe iranlọwọ fun wa ni oye imọran ti iṣapeye ti o da lori idiyele nigbamii (iye owo orisun o dara ju).

Erongba

Aago complexity ti awọn alugoridimu ti a lo lati rii bi algorithm yoo ṣe pẹ to lati pari fun iye data ti a fun. Lati ṣapejuwe idiju yii, a lo akiyesi mathematiki nla O. A lo ami akiyesi yii pẹlu iṣẹ kan ti o ṣapejuwe iye awọn iṣẹ ṣiṣe ti algoridimu nilo fun nọmba ti awọn igbewọle.

Fun apẹẹrẹ, nigbati mo sọ pe "algoridimu yii ni idiju O (some_function ())", o tumọ si pe algorithm nilo awọn iṣẹ diẹ ninu iṣẹ (a_certain_amount_of_data) lati ṣe ilana iye data kan.

Nibo Kii ṣe iye data ti o ṣe pataki ***, bibẹkọ ** bawo ni nọmba awọn iṣẹ ṣe pọ si pẹlu jijẹ iwọn data. Idiju akoko ko pese nọmba gangan ti awọn iṣẹ ṣiṣe, ṣugbọn jẹ ọna ti o dara lati ṣe iṣiro akoko ipaniyan.

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Ninu aworan yii o le rii nọmba awọn iṣẹ ṣiṣe ni ibamu si iye data igbewọle fun awọn oriṣiriṣi awọn eka akoko algoridimu. Mo lo iwọn logarithmic lati ṣe afihan wọn. Ni awọn ọrọ miiran, iye data ni kiakia pọ lati 1 si 1 bilionu. A le rii pe:

  • O(1) tabi idiju igbagbogbo duro nigbagbogbo (bibẹẹkọ kii yoo pe ni idiju igbagbogbo).
  • O(wọle(n)) si maa wa kekere ani pẹlu ọkẹ àìmọye ti data.
  • Isoro ti o buru ju - O(n2), nibiti nọmba awọn iṣẹ ṣiṣe n dagba ni iyara.
  • Awọn ilolu meji miiran pọ si ni yarayara.

Awọn apẹẹrẹ

Pẹlu iye kekere ti data, iyatọ laarin O (1) ati O (n2) jẹ aifiyesi. Fun apẹẹrẹ, jẹ ki a sọ pe o ni algorithm kan ti o nilo lati ṣe ilana awọn eroja 2000.

  • O(1) algorithm yoo na ọ ni iṣẹ 1
  • O(log(n)) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 7
  • O(n) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 2
  • O(n*log(n)) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 14
  • O(n2) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 4

Iyatọ laarin O (1) ati O (n2) dabi nla (awọn iṣẹ miliọnu mẹrin) ṣugbọn iwọ yoo padanu iwọn 4 ms ti o pọju, ni akoko kan lati pa oju rẹ. Nitootọ, igbalode nse le ilana awọn ọgọọgọrun miliọnu awọn iṣẹ fun iṣẹju kan. Eyi ni idi ti iṣẹ ati iṣapeye kii ṣe ọran ni ọpọlọpọ awọn iṣẹ akanṣe IT.

Gẹgẹbi Mo ti sọ, o tun ṣe pataki lati mọ ero yii nigbati o ba n ṣiṣẹ pẹlu awọn oye nla ti data. Ti akoko yii algorithm ni lati ṣe ilana awọn eroja 1 (eyiti kii ṣe pupọ fun data data):

  • O(1) algorithm yoo na ọ ni iṣẹ 1
  • O(log(n)) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 14
  • O(n) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 1
  • O(n*log(n)) algorithm yoo na ọ ni awọn iṣẹ ṣiṣe 14
  • algorithm O(n2) yoo jẹ fun ọ ni awọn iṣẹ ṣiṣe 1

Emi ko ṣe iṣiro, ṣugbọn Emi yoo sọ pe pẹlu algorithm O (n2) o ni akoko lati mu kọfi kan (paapaa meji!). Ti o ba ṣafikun 0 miiran si iwọn didun data, iwọ yoo ni akoko lati sun oorun.

Jẹ ki a lọ jinle

Fun itọkasi:

  • Ṣiṣayẹwo tabili hash ti o dara wa nkan kan ninu O(1).
  • Ṣiṣawari igi ti o ni iwọntunwọnsi daradara n ṣe awọn abajade ni O(log(n)).
  • Wiwa orun kan mu awọn abajade jade ni O(n).
  • Awọn algoridimu yiyan ti o dara julọ ni idiju O (n * log(n)).
  • Alugoridimu yiyan buburu ni idiju O (n2).

Akiyesi: Ni awọn apakan atẹle a yoo rii awọn algoridimu wọnyi ati awọn ẹya data.

Awọn oriṣi pupọ lo wa ti idiju akoko algorithm:

  • apapọ irú ohn
  • ti o dara ju irú ohn
  • ati buru irú ohn

Idiju akoko nigbagbogbo jẹ oju iṣẹlẹ ti o buru julọ.

Mo n sọrọ nikan nipa idiju akoko ti algorithm, ṣugbọn idiju tun kan si:

  • agbara iranti ti alugoridimu
  • disk Mo / O agbara alugoridimu

Nitoribẹẹ, awọn ilolu wa ti o buru ju n2, fun apẹẹrẹ:

  • n4: eyi jẹ ẹru! Diẹ ninu awọn algoridimu ti a mẹnuba ni idiju yii.
  • 3n: Eyi paapaa buru! Ọkan ninu awọn algoridimu ti a yoo rii ni aarin nkan yii ni idiju yii (ati pe o lo ni otitọ pe ni ọpọlọpọ awọn apoti isura data).
  • factorial n: iwọ kii yoo gba awọn abajade rẹ paapaa pẹlu iye kekere ti data.
  • nn: Ti o ba pade idiju yii, o yẹ ki o beere lọwọ ararẹ boya eyi jẹ aaye iṣẹ ṣiṣe rẹ looto…

Akiyesi: Emi ko fun ọ ni asọye gangan ti yiyan O nla, imọran kan. O le ka nkan yii ni Wikipedia fun awọn ti gidi (asymptotic) definition.

ApapọSort

Kini o ṣe nigbati o nilo lati to awọn akojọpọ kan? Kini? O pe iṣẹ too () naa… O dara, idahun to dara… Ṣugbọn fun ibi ipamọ data, o gbọdọ loye bii iṣẹ too () yii ṣe n ṣiṣẹ.

Awọn algoridimu yiyan ti o dara pupọ wa, nitorinaa Emi yoo dojukọ pataki julọ: dapọ too. O le ma loye idi ti yiyan data ṣe wulo ni bayi, ṣugbọn o yẹ lẹhin apakan iṣapeye ibeere naa. Pẹlupẹlu, agbọye iru apapọ yoo ṣe iranlọwọ fun wa nigbamii ni oye iṣẹ iṣọpọ data ti o wọpọ ti a pe lọ da (apapọ).

Dapọ

Bii ọpọlọpọ awọn algoridimu ti o wulo, apapọ too da lori ẹtan kan: apapọ 2 awọn akojọpọ lẹsẹsẹ ti iwọn N/2 sinu ẹya N-ero lẹsẹsẹ awọn idiyele titobi N nikan. Iṣẹ ṣiṣe yii ni a pe ni idapọ.

Jẹ ki a wo kini eyi tumọ si pẹlu apẹẹrẹ ti o rọrun:

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Nọmba yii fihan pe lati kọ ipilẹ-ipilẹ 8-ipilẹ ti o kẹhin, iwọ nikan nilo lati ṣe atunbere lẹẹkan lori awọn eto eroja 2 4. Níwọ̀n bí a ti ṣètò àwọn àgbékalẹ̀ ẹ̀yà mẹ́rin méjèèjì:

  • 1) o ṣe afiwe awọn eroja lọwọlọwọ mejeeji ni awọn ọna meji (ni ibẹrẹ lọwọlọwọ = akọkọ)
  • 2) lẹhinna mu eyi ti o kere julọ lati fi sii sinu ohun elo 8 kan
  • 3) ati ki o gbe si awọn tókàn ano ni orun ibi ti o ti mu awọn kere ano
  • ki o si tun 1,2,3 titi ti o ba de awọn ti o kẹhin ano ti ọkan ninu awọn orun.
  • Lẹhinna o mu awọn eroja ti o ku ti orun miiran lati fi wọn sinu apẹrẹ 8 kan.

Eyi n ṣiṣẹ nitori pe a ti to lẹsẹsẹ awọn ẹya 4-eroja ati nitorinaa o ko ni lati “pada sẹhin” ninu awọn akopọ wọnyẹn.

Ni bayi ti a loye ẹtan naa, eyi ni pseudocode mi fun apapọ:

array mergeSort(array a)
   if(length(a)==1)
      return a[0];
   end if

   //recursive calls
   [left_array right_array] := split_into_2_equally_sized_arrays(a);
   array new_left_array := mergeSort(left_array);
   array new_right_array := mergeSort(right_array);

   //merging the 2 small ordered arrays into a big one
   array result := merge(new_left_array,new_right_array);
   return result;

Ijọpọ lẹsẹsẹ fọ iṣoro kan sinu awọn iṣoro kekere ati lẹhinna wa awọn abajade ti awọn iṣoro kekere lati gba abajade ti iṣoro atilẹba (akọsilẹ: iru algorithm yii ni a pe ni pipin ati ṣẹgun). Ti o ko ba loye algorithm yii, maṣe yọ ara rẹ lẹnu; Emi ko loye rẹ ni igba akọkọ ti Mo rii. Ti o ba le ṣe iranlọwọ fun ọ, Mo rii algoridimu yii bi algoridimu meji-meji:

  • Ipele pipin, nibiti a ti pin akojọpọ si awọn akojọpọ kekere
  • Ipele tito lẹsẹẹsẹ ni ibi ti awọn akojọpọ kekere ti wa ni idapo (lilo Euroopu) lati ṣe apẹrẹ nla kan.

Pipin alakoso

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Ni ipele pipin, titobi naa ti pin si awọn akojọpọ ẹyọkan ni awọn igbesẹ mẹta. Nọmba iṣe deede ti awọn igbesẹ jẹ log(N) (niwon N=3, log(N) = 8).

Bawo ni MO ṣe mọ eyi?

Mo jẹ oloye-pupọ! Ninu ọrọ kan - mathimatiki. Awọn agutan ni wipe kọọkan igbese pin awọn iwọn ti awọn atilẹba orun nipa 2. Nọmba ti awọn igbesẹ ni awọn nọmba ti igba ti o le pin awọn atilẹba orun si meji. Eyi ni itumọ gangan ti logarithm (ipilẹ 2).

Ilana tito lẹsẹsẹ

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Ni ipele tito lẹsẹsẹ, o bẹrẹ pẹlu awọn akojọpọ ẹyọkan (ẹyọ-ẹyọkan). Lakoko igbesẹ kọọkan o lo awọn iṣẹ iṣọpọ lọpọlọpọ ati idiyele lapapọ jẹ N = awọn iṣẹ ṣiṣe 8:

  • Ni ipele akọkọ o ni awọn akojọpọ 4 ti o jẹ awọn iṣẹ 2 kọọkan
  • Ni awọn keji igbese ti o ni 2 merges ti o na 4 mosi kọọkan
  • Ni awọn kẹta igbese ti o ni 1 àkópọ eyi ti owo 8 mosi

Niwọn igba ti awọn igbesẹ log (N) wa, apapọ iye owo N * log (N) awọn iṣẹ.

Awọn anfani ti akojọpọ too

Kini idi ti algorithm yii lagbara?

Nitoripe:

  • O le yi pada lati dinku ifẹsẹtẹ iranti ki o maṣe ṣẹda awọn akojọpọ tuntun ṣugbọn ṣe atunṣe ọna titẹ sii taara.

Akiyesi: iru algorithm yii ni a pe in-ibi (to lai afikun iranti).

  • O le yi pada lati lo aaye disk ati iwọn kekere ti iranti ni akoko kanna laisi jijẹ I/O disk pataki lori oke. Ero naa ni lati ṣaja sinu iranti nikan awọn ẹya wọnyẹn ti o ti ṣiṣẹ lọwọlọwọ. Eyi ṣe pataki nigbati o nilo lati to tabili pupọ-gigabyte pẹlu ifipamọ iranti megabyte 100 nikan.

Akiyesi: iru algorithm yii ni a pe ita too.

  • O le yipada lati ṣiṣẹ lori awọn ilana pupọ / awọn okun / olupin.

Fun apẹẹrẹ, iru idapọpọ pinpin jẹ ọkan ninu awọn paati bọtini Hadoop (eyi ti o jẹ a be ni ńlá data).

  • Yi algoridimu le tan asiwaju sinu wura (gan!).

Alugoridimu yiyan yii ni a lo ninu pupọ julọ (ti kii ṣe gbogbo) awọn apoti isura data, ṣugbọn kii ṣe ọkan nikan. Ti o ba fẹ mọ diẹ sii, o le ka eyi iṣẹ iwadi, eyi ti o jiroro awọn anfani ati awọn konsi ti awọn algorithms ti o wọpọ ti o wọpọ.

orun, Igi ati Hash Table

Ni bayi ti a loye imọran ti idiju akoko ati yiyan, Mo yẹ ki o sọ fun ọ nipa awọn ẹya data 3. Eyi ṣe pataki nitori wọn jẹ ipilẹ awọn apoti isura data ode oni. Emi yoo tun ṣafihan ero naa database atọka.

Ṣẹgun

Eto onisẹpo meji ni ọna data ti o rọrun julọ. A le ro tabili bi ohun orun. Fun apere:

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Eto onisẹpo meji yii jẹ tabili pẹlu awọn ori ila ati awọn ọwọn:

  • Laini kọọkan duro fun nkan kan
  • Awọn ọwọn tọju awọn ohun-ini ti o ṣapejuwe nkan naa.
  • Iwe kọọkan tọju data ti iru kan pato (odidi, okun, ọjọ ...).

Eyi rọrun fun titoju ati wiwo data, sibẹsibẹ, nigbati o nilo lati wa iye kan pato, eyi ko dara.

Fun apẹẹrẹ, ti o ba fẹ lati wa gbogbo awọn ọmọkunrin ti o ṣiṣẹ ni UK, iwọ yoo nilo lati wo ila kọọkan lati pinnu boya ila yẹn jẹ ti UK. O yoo na o N lẹkọnibo N - nọmba awọn laini, eyiti kii ṣe buburu, ṣugbọn o le jẹ ọna yiyara bi? Bayi o to akoko fun wa lati faramọ awọn igi.

Akiyesi: Pupọ awọn apoti isura infomesonu ode oni n pese awọn ọna ti o gbooro fun titoju awọn tabili pamọ daradara: awọn tabili iṣeto-okiti ati awọn tabili iṣeto atọka. Ṣugbọn eyi ko yi iṣoro naa pada ni kiakia wiwa ipo kan pato ni ẹgbẹ awọn ọwọn.

Igi aaye data ati atọka

Igi wiwa alakomeji jẹ igi alakomeji pẹlu ohun-ini pataki, bọtini ni ipade kọọkan gbọdọ jẹ:

  • tobi ju gbogbo awọn bọtini ti o ti fipamọ ni osi subtree
  • kere ju gbogbo awọn bọtini ti o ti fipamọ ni ọtun subtree

Jẹ ki a wo kini eyi tumọ si oju

Agutan

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Igi yii ni N = 15 eroja. Jẹ ki a sọ pe Mo n wa 208:

  • Mo bẹrẹ ni root ti bọtini rẹ jẹ 136. Niwon 136<208, Mo wo apa ọtun ti node 136.
  • 398>208 Nitorina Mo n wo apa osi ti node 398
  • 250>208 Nitorina Mo n wo apa osi ti node 250
  • 200<208, nitorina ni mo ṣe n wo igi abẹlẹ ti o tọ ti node 200. Ṣugbọn 200 ko ni abẹ abẹ ti o tọ. iye ko si (nitori ti o ba wa, yoo wa ni ọtun subtree 200).

Bayi jẹ ki a sọ pe Mo n wa 40

  • Mo bẹrẹ ni gbongbo ti bọtini rẹ jẹ 136. Lati 136> 40, Mo wo apa osi ti node 136.
  • 80> 40, nitorinaa Mo n wo apa osi ti ipade 80
  • 40=40, ipade wa. Mo gba ID kana inu awọn ipade (ko han ninu aworan) ati ki o wo ninu tabili fun awọn kana ID.
  • Mọ ID kana gba mi lati mọ pato ibi ti awọn data jẹ ninu awọn tabili, ki emi ki o le gba o lesekese.

Ni ipari, awọn wiwa mejeeji yoo jẹ mi ni nọmba awọn ipele inu igi naa. Ti o ba ka apakan nipa iṣọpọ too ni pẹkipẹki, o yẹ ki o rii pe awọn ipele log(N) wa. O wa ni jade, iwe iye owo wiwa (N), ko buru!

E je ki a pada si isoro wa

Ṣugbọn eyi jẹ áljẹbrà pupọ, nitorinaa jẹ ki a pada si iṣoro wa. Dipo odidi ti o rọrun, fojuinu okun ti o duro fun orilẹ-ede ti ẹnikan ninu tabili iṣaaju. Jẹ ki a sọ pe o ni igi ti o ni aaye "orilẹ-ede" (iwe 3) ti tabili naa:

  • Ti o ba fẹ mọ ẹniti o ṣiṣẹ ni UK
  • o wo igi lati gba ipade ti o duro fun Great Britain
  • inu "UKnode" iwọ yoo wa ipo ti awọn igbasilẹ oṣiṣẹ UK.

Wiwa yii yoo jẹ idiyele awọn iṣẹ log (N) dipo awọn iṣẹ N ti o ba lo orun taara. Ohun ti o kan gbekalẹ ni database atọka.

O le kọ igi atọka fun eyikeyi ẹgbẹ awọn aaye (okun, nọmba, awọn ila 2, nọmba ati okun, ọjọ ...) niwọn igba ti o ba ni iṣẹ kan lati ṣe afiwe awọn bọtini (ie awọn ẹgbẹ aaye) ki o le ṣeto ibere laarin awọn bọtini (eyiti o jẹ ọran fun eyikeyi ipilẹ awọn iru ninu database).

B + TreeIndex

Lakoko ti igi yii ṣiṣẹ daradara fun gbigba iye kan pato, iṣoro nla kan wa nigbati o nilo gba ọpọ eroja laarin meji iye. Eyi yoo jẹ idiyele O (N) nitori pe iwọ yoo ni lati wo oju ipade kọọkan ninu igi naa ki o ṣayẹwo boya o wa laarin awọn iye meji wọnyi (fun apẹẹrẹ pẹlu gbigbe gbigbe ti igi naa). Pẹlupẹlu, išišẹ yii kii ṣe ore disiki I/O nitori o ni lati ka gbogbo igi naa. A nilo lati wa ọna lati ṣiṣẹ daradara ìbéèrè ibiti. Lati yanju iṣoro yii, awọn apoti isura infomesonu ode oni lo ẹya tuntun ti igi ti tẹlẹ ti a pe ni B+ Tree. Ninu igi B+ kan:

  • awọn apa ti o kere julọ (awọn ewe) itaja alaye (ipo ti awọn ori ila ninu tabili ti o jọmọ)
  • awọn iyokù ti awọn apa wa nibi fun afisona si ipade ti o tọ nigba search.

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Bi o ti le rii, awọn apa diẹ sii wa nibi (lẹmeji). Nitootọ, o ni awọn apa afikun, “awọn apa ipinnu”, ti yoo ṣe iranlọwọ fun ọ lati wa ipade ti o pe (eyiti o tọju ipo ti awọn ori ila ni tabili ti o somọ). Ṣugbọn idiju wiwa ṣi tun jẹ O(log(N)) (ipele kan ṣoṣo ni o wa). Iyato nla ni pe apa ni isalẹ ipele ti wa ni ti sopọ si wọn successors.

Pẹlu Igi B + yii, ti o ba n wa awọn iye laarin 40 ati 100:

  • O kan nilo lati wa 40 (tabi iye to sunmọ lẹhin 40 ti 40 ko ba si) bi o ti ṣe pẹlu igi ti tẹlẹ.
  • Lẹhinna gba awọn ajogun 40 ni lilo awọn ọna asopọ ajogun taara titi ti o fi de 100.

Jẹ ká sọ pé o ri M successors ati awọn igi ni o ni N apa. Wiwa apa kan pato owo log(N) bi igi ti tẹlẹ. Ṣugbọn ni kete ti o ba gba ipade yii, iwọ yoo gba awọn arọpo M ni awọn iṣẹ ṣiṣe pẹlu awọn itọkasi si awọn arọpo wọn. Wiwa yii nikan ni idiyele M+log(N) mosi akawe si N mosi lori išaaju igi. Jubẹlọ, o ko ni lati ka ni kikun igi (nikan M+log(N) nodes), eyi ti o tumo si kere lilo disk. Ti M ba kere (fun apẹẹrẹ awọn ori ila 200) ati N tobi (awọn ori ila 1), iyatọ nla yoo wa.

Ṣugbọn awọn iṣoro tuntun wa nibi (lẹẹkansi!). Ti o ba ṣafikun tabi paarẹ ila kan ninu aaye data (ati nitori naa ninu atọka B+Igi ti o somọ):

  • o gbọdọ ṣetọju ilana laarin awọn apa inu B + Igi kan, bibẹẹkọ iwọ kii yoo ni anfani lati wa awọn apa inu igi ti a ko sọtọ.
  • o gbọdọ tọju nọmba ti o kere julọ ti awọn ipele ni B + Igi, bibẹẹkọ idiju akoko O (log (N)) di O (N).

Ni awọn ọrọ miiran, B + Igi gbọdọ jẹ aṣẹ-ara ati iwọntunwọnsi. Ni Oriire, eyi ṣee ṣe pẹlu smati paarẹ ati fi awọn iṣẹ sii. Ṣugbọn eyi wa ni idiyele: awọn ifibọ ati awọn piparẹ ni idiyele igi B+ O (log(N)). Ìdí nìyí tí àwọn kan nínú yín fi gbọ́ bẹ́ẹ̀ lilo ju ọpọlọpọ awọn atọka ni ko kan ti o dara agutan. Looto, o n fa fifalẹ fi sii / imudojuiwọn / paarẹ ọna kan ni tabili kannitori ibi ipamọ data nilo lati ṣe imudojuiwọn awọn atọka tabili ni lilo iṣẹ O(log(N)) gbowolori fun atọka kọọkan. Pẹlupẹlu, fifi awọn atọka kun tumọ si iṣẹ ṣiṣe diẹ sii fun idunadura alakoso (yoo ṣe apejuwe ni opin nkan naa).

Fun alaye diẹ sii, o le wo nkan Wikipedia lori B+Tree. Ti o ba fẹ apẹẹrẹ ti imuse B + Igi ni aaye data, wo Arokọ yi и Arokọ yi lati a asiwaju MySQL developer. Awọn mejeeji dojukọ lori bii InnoDB (ẹnjini MySQL) ṣe n kapa awọn atọka.

Akiyesi: Oluka kan sọ fun mi pe, nitori awọn iṣapeye ipele kekere, igi B + yẹ ki o jẹ iwontunwonsi patapata.

Hashtable

Eto data pataki ti o kẹhin wa ni tabili hash. Eyi wulo pupọ nigbati o ba fẹ yara wo awọn iye. Pẹlupẹlu, agbọye tabili hash yoo ṣe iranlọwọ fun wa nigbamii ni oye iṣẹ iṣọpọ data ti o wọpọ ti a pe ni idapọ hash ( hash darapọ). Eto data yii tun jẹ lilo nipasẹ ibi ipamọ data lati tọju diẹ ninu awọn nkan inu (fun apẹẹrẹ. tabili titiipa tabi saarin pool, a yoo ri mejeji ti awọn wọnyi agbekale nigbamii).

Tabili hash jẹ eto data ti o yara wa nkan kan nipasẹ bọtini rẹ. Lati kọ tabili hash o nilo lati ṣalaye:

  • bọtini fun awọn eroja rẹ
  • elile iṣẹ fun awọn bọtini. Awọn hashes bọtini ti a ṣe iṣiro fun ipo ti awọn eroja (ti a npe ni awọn apa ).
  • iṣẹ fun afiwe awọn bọtini. Ni kete ti o ba ti rii apakan ti o pe, o gbọdọ wa eroja ti o n wa laarin apakan nipa lilo lafiwe yii.

Apẹẹrẹ ti o rọrun

Jẹ ki a mu apẹẹrẹ ti o daju:

Bawo ni Awọn aaye data Ibasepo Ṣiṣẹ (Apá 1)

Tabili hash yii ni awọn abala 10. Nitori emi ọlẹ, Mo ya aworan awọn apa 5 nikan, ṣugbọn emi mọ pe o jẹ ọlọgbọn, nitorina Emi yoo jẹ ki o ya aworan 5 miiran funrararẹ. Mo ti lo a elile iṣẹ modulo 10 ti awọn bọtini. Ni awọn ọrọ miiran, Mo tọju nọmba to kẹhin ti bọtini eroja lati wa apakan rẹ:

  • Ti nọmba ti o kẹhin ba jẹ 0, eroja naa ṣubu si apakan 0,
  • Ti nọmba ti o kẹhin ba jẹ 1, eroja naa ṣubu si apakan 1,
  • ti nọmba ti o kẹhin ba jẹ 2, eroja naa ṣubu si agbegbe 2,
  • ...

Iṣẹ lafiwe ti Mo lo jẹ dọgbadọgba lasan laarin awọn odidi meji.

Jẹ ki a sọ pe o fẹ lati ni ipin 78:

  • Tabili hash ṣe iṣiro koodu hash fun 78, eyiti o jẹ 8.
  • Tabili hash n wo apa 8, ati pe ipin akọkọ ti o rii jẹ 78.
  • O da nkan 78 pada si ọ
  • Awọn iṣẹ ṣiṣe 2 nikan ni wiwa (ọkan lati ṣe iṣiro iye hash ati ekeji lati wo nkan naa laarin apakan).

Bayi jẹ ki a sọ pe o fẹ lati ni ipin 59:

  • Tabili hash ṣe iṣiro koodu hash fun 59, eyiti o jẹ 9.
  • Awọn wiwa tabili hash ni apa 9, ipin akọkọ ti a rii jẹ 99. Lati 99!=59, ipin 99 kii ṣe ohun elo to wulo.
  • Lilo ọgbọn kanna, ipin keji (9), ẹkẹta (79), ..., ti o kẹhin (29) ni a mu.
  • Ko ri eroja.
  • Awọn wiwa iye owo 7 mosi.

Ti o dara elile iṣẹ

Bi o ti le rii, da lori iye ti o n wa, idiyele naa kii ṣe kanna!

Ti MO ba yipada iṣẹ hash modulo 1 ti bọtini (iyẹn, mu awọn nọmba 000 ti o kẹhin), wiwa keji nikan ni idiyele iṣẹ 000 niwọn igba ti ko si awọn eroja ni apakan 6. Ipenija gidi ni lati wa iṣẹ hash ti o dara ti yoo ṣẹda awọn buckets ti o ni nọmba kekere ti awọn eroja.

Ninu apẹẹrẹ mi, wiwa iṣẹ hash to dara jẹ rọrun. Ṣugbọn eyi jẹ apẹẹrẹ ti o rọrun, wiwa iṣẹ hash ti o dara julọ nira nigbati bọtini naa jẹ:

  • okun (fun apẹẹrẹ - orukọ idile)
  • Awọn laini 2 (fun apẹẹrẹ - orukọ idile ati orukọ akọkọ)
  • Awọn laini 2 ati ọjọ (fun apẹẹrẹ - orukọ idile, orukọ akọkọ ati ọjọ ibi)
  • ...

Pẹlu iṣẹ hash to dara, awọn wiwa tabili hash jẹ idiyele O(1).

Orun vs hash tabili

Idi ti ko lo ohun orun?

Hmm, ibeere to dara.

  • Tabili hash le jẹ apakan ti kojọpọ sinu iranti, ati awọn ti o ku apa le wa nibe lori disk.
  • Pẹlu ohun orun o gbọdọ lo contiguous aaye ni iranti. Ti o ba n ṣajọpọ tabili nla kan o jẹ gidigidi soro lati ri to lemọlemọfún aaye.
  • Fun tabili hash, o le yan bọtini ti o fẹ (fun apẹẹrẹ, orilẹ-ede ati orukọ ikẹhin eniyan).

Fun alaye diẹ sii, o le ka nkan naa nipa JavaHashMap, eyi ti o jẹ imuse daradara ti tabili hash; o ko nilo lati ni oye Java lati loye awọn imọran ti a bo ninu nkan yii.

orisun: www.habr.com

Fi ọrọìwòye kun