Kijan baz done relasyon travay (pati 1)

Hey Habr! Mwen prezante nan atansyon ou tradiksyon an nan atik la
"Kijan yon baz done relasyon travay".

Lè li rive baz done relasyon mwen pa ka ede men panse yon bagay ki manke. Yo itilize tout kote. Gen anpil baz done diferan ki disponib, soti nan ti SQLite ki itil ak Teradata pwisan. Men, gen sèlman kèk atik ki eksplike kijan baz done a fonksyone. Ou ka chèche pou tèt ou lè l sèvi avèk "howdoesarelationaldatabasework" pou wè konbyen rezilta yo genyen. Anplis, atik sa yo kout. Si w ap chèche pou dènye teknoloji buzzy yo (BigData, NoSQL oswa JavaScript), w ap jwenn plis atik apwofondi ki eksplike kijan yo travay.

Èske baz done relasyon yo twò ansyen ak twò raz pou yo eksplike andeyò kou inivèsite, papye rechèch ak liv?

Kijan baz done relasyon travay (pati 1)

Kòm yon devlopè, mwen rayi itilize yon bagay mwen pa konprann. Men, si baz done yo te itilize pou plis pase 40 ane, dwe gen yon rezon. Pandan ane yo, mwen te pase plizyè santèn èdtan pou vrèman konprann bwat nwa etranj sa yo ke mwen itilize chak jou. Baz done relasyon trè enteresan paske yo baze sou konsèp itil ak ki kapab itilize ankò. Si w enterese konprann yon baz done, men pa janm gen tan oswa enklinasyon pou fouye nan sijè sa a gwo, ou ta dwe jwi atik sa a.

Malgre tit atik sa a klè, objektif la nan atik sa a se pa konprann ki jan yo sèvi ak baz done a. Pakonsekan, ou ta dwe deja konnen ki jan yo ekri yon demann koneksyon senp ak demann debaz RAW; sinon ou ka pa konprann atik sa a. Se sèl bagay ou bezwen konnen, map eksplike rès la.

Mwen pral kòmanse ak kèk baz syans enfòmatik, tankou konpleksite tan nan algoritm (BigO). Mwen konnen kèk nan nou rayi konsèp sa a, men san li ou pa pral kapab konprann sibtilite ki andedan baz done a. Piske sa a se yon gwo sijè, Mwen pral konsantre sou sa mwen panse ki enpòtan: ki jan baz done a trete SQL ankèt. Mwen pral jis prezante konsèp baz done debaz yose konsa ke nan fen atik la ou gen yon lide sou sa k ap pase anba kapo a.

Depi sa a se yon atik long ak teknik ki enplike yon anpil nan algoritm ak estrikti done, pran tan ou li nan li. Gen kèk konsèp ki ka difisil pou konprann; ou ka sote yo epi toujou jwenn lide jeneral la.

Pou moun ki gen plis konesans nan mitan nou, atik sa a divize an 3 pati:

  • Apèsi sou eleman baz done ki ba ak wo nivo
  • Apèsi sou Pwosesis Optimizasyon Rekèt la
  • Apèsi sou Tranzaksyon ak Jesyon Tanpon Pool

Retounen nan Basics

Ane de sa (nan yon galaksi byen lwen, byen lwen...), devlopè yo te dwe konnen egzakteman kantite operasyon yo te kode. Yo te konnen algorithm yo ak estrikti done yo pa kè paske yo pa t 'kapab peye gaspiye CPU a ak memwa nan òdinatè dousman yo.

Nan pati sa a, mwen pral raple w kèk nan konsèp sa yo paske yo esansyèl pou konprann baz done a. Mwen pral tou prezante konsèp la endèks baz done.

O(1) kont O(n2)

Sèjousi, anpil devlopè pa pran swen sou konpleksite tan nan algoritm ... epi yo gen rezon!

Men, lè w ap fè fas ak anpil done (mwen pa pale dè milye) oswa si w ap konbat nan milisgond, li vin kritik yo konprann konsèp sa a. Ak jan ou ka imajine, baz done yo dwe fè fas ak tou de sitiyasyon! Mwen p'ap fè ou pase plis tan pase sa nesesè pou jwenn pwen an. Sa ap ede nou konprann konsèp optimize ki baze sou pri pita (koute ki baze optimize).

Konsèp

Konpleksite tan nan algorithm la yo itilize pou wè konbyen tan li pral pran pou egzekite yon algorithm pou yon kantite done yo bay. Pou dekri konpleksite sa a, nou itilize gwo notasyon matematik O. Yo itilize notasyon sa a ak yon fonksyon ki dekri konbyen operasyon yon algorithm bezwen pou yon kantite antre.

Pou egzanp, lè mwen di "algorithm sa a gen konpleksite O(some_function())", sa vle di ke algorithm la mande kèk_function(a_certain_amount_of_data) operasyon pou trete yon sèten kantite done.

Nan ka sa a, Se pa kantite done ki enpòtan**, sinon ** ki jan kantite operasyon yo ogmante ak ogmante volim done yo. Konpleksite tan pa bay yon kantite egzak operasyon, men se yon bon fason pou estime tan ekzekisyon.

Kijan baz done relasyon travay (pati 1)

Nan graf sa a ou ka wè kantite operasyon parapò ak kantite done antre pou diferan kalite konpleksite tan algorithm. Mwen te itilize yon echèl logaritmik pou montre yo. Nan lòt mo, kantite done yo byen vit ogmante soti nan 1 a 1 milya dola. Nou ka wè ke:

  • O(1) oswa konpleksite konstan rete konstan (otreman li pa ta rele konpleksite konstan).
  • O(louvri sesyon(n)) rete ba menm ak dè milya de done.
  • Pi move difikilte - O(n2), kote kantite operasyon yo ap grandi rapidman.
  • De lòt konplikasyon yo ogmante menm jan byen vit.

egzanp

Avèk yon ti kantite done, diferans ki genyen ant O(1) ak O (n2) se neglijab. Pou egzanp, an n di ou gen yon algorithm ki bezwen trete 2000 eleman.

  • Algorithm O(1) ap koute w 1 operasyon
  • Algorithm O(log(n)) ap koute w 7 operasyon
  • Algorithm O(n) ap koute ou 2 operasyon
  • Algorithm O(n*log(n)) ap koute ou 14 operasyon
  • Algorithm O(n2) ap koute ou 4 operasyon

Diferans ki genyen ant O(1) ak O(n2) sanble gwo (4 milyon operasyon) men ou pral pèdi yon maksimòm de 2 ms, jis tan pou bat je ou. Vreman vre, processeurs modèn ka trete dè santèn de milyon operasyon pou chak segonn. Se poutèt sa pèfòmans ak optimize pa yon pwoblèm nan anpil pwojè IT.

Kòm mwen te di, li toujou enpòtan pou konnen konsèp sa a lè w ap travay ak gwo kantite done. Si tan sa a algorithm a gen pou trete 1 eleman (ki pa tèlman pou yon baz done):

  • Algorithm O(1) ap koute w 1 operasyon
  • Algorithm O(log(n)) ap koute w 14 operasyon
  • Algorithm O(n) ap koute ou 1 operasyon
  • Algorithm O(n*log(n)) ap koute ou 14 operasyon
  • Algorithm O(n2) ap koute ou 1 operasyon

Mwen pa fè matematik la, men mwen ta di ke ak algorithm O(n2) ou gen tan bwè yon kafe (menm de!). Si ou ajoute yon lòt 0 nan volim done a, w ap gen tan fè yon ti dòmi.

Ann ale pi fon

Pou enfòmasyon ou:

  • Yon bon rechèch tab hash jwenn yon eleman nan O(1).
  • Chèche yon pye bwa ki byen balanse pwodui rezilta nan O(log(n)).
  • Chèche yon etalaj pwodui rezilta nan O(n).
  • Pi bon algoritm klasman yo gen konpleksite O(n*log(n)).
  • Yon algorithm klasman move gen konpleksite O(n2).

Remak: Nan pati sa yo nou pral wè sa yo algoritm ak estrikti done.

Gen plizyè kalite konpleksite tan algorithm:

  • senaryo ka mwayèn
  • pi bon senaryo ka
  • ak pi move ka senaryo

Konpleksite tan se souvan senaryo ki pi mal la.

Mwen te sèlman pale de konpleksite tan algorithm la, men konpleksite aplike tou pou:

  • konsomasyon memwa nan algorithm la
  • disk I/O algorithm konsomasyon

Natirèlman, gen konplikasyon ki pi mal pase n2, pou egzanp:

  • n4: sa se terib! Gen kèk nan algorithm mansyone yo gen konpleksite sa a.
  • 3n: sa a se menm pi mal! Youn nan algoritm nou pral wè nan mitan atik sa a gen konpleksite sa a (epi li aktyèlman itilize nan anpil baz done).
  • faktorial n: ou p'ap janm jwenn rezilta ou menm ak yon ti kantite done.
  • nn: Si w rankontre konpleksite sa a, ou ta dwe mande tèt ou si se vrèman domèn aktivite w...

Remak: Mwen pa t 'ba ou definisyon aktyèl la nan deziyasyon an gwo O, jis yon lide. Ou ka li atik sa a nan Wikipedia pou definisyon reyèl (asenptotik).

MergeSort

Kisa ou fè lè ou bezwen sòt yon koleksyon? Kisa? Ou rele fonksyon sort()... Oke, bon repons... Men, pou yon baz done, ou dwe konprann ki jan fonksyon sort() sa a ap travay.

Gen plizyè bon algorithm klasman, kidonk mwen pral konsantre sou pi enpòtan an: fizyone sòt. Ou ka pa konprann poukisa klasman done yo itil kounye a, men ou ta dwe apre pati optimize rechèch la. Anplis, konprann rantre sòt pral ede nou pita konprann operasyon an komen baz done rantre yo rele rantre rantre nan (asosyasyon fizyon).

Rantre

Menm jan ak anpil algoritm itil, sòt fizyon depann sou yon trik: konbine 2 etalaj klase ki gen gwosè N/2 nan yon etalaj klase N-eleman koute sèlman N operasyon. Operasyon sa a rele fusion.

Ann wè sa sa vle di ak yon egzanp senp:

Kijan baz done relasyon travay (pati 1)

Figi sa a montre ke pou konstwi final ranje 8-eleman etalaj la, ou sèlman bezwen repete yon fwa sou 2 4-eleman etalaj yo. Depi tou de etalaj 4 eleman yo deja klase:

  • 1) ou konpare tou de eleman aktyèl yo nan de etalaj (nan kòmansman aktyèl la = premye)
  • 2) Lè sa a, pran pi piti a pou mete l nan yon etalaj 8 eleman
  • 3) epi ale nan pwochen eleman nan etalaj la kote ou te pran eleman ki pi piti a
  • epi repete 1,2,3 jiskaske ou rive nan dènye eleman youn nan etalaj yo.
  • Lè sa a, ou pran eleman ki rete yo nan lòt etalaj la pou mete yo nan yon etalaj 8 eleman.

Sa a travay paske tou de 4-eleman etalaj yo klase epi konsa ou pa bezwen "tounen tounen" nan ranje sa yo.

Kounye a ke nou konprann jwe fent la, isit la nan pseudocode mwen an pou rantre:

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;

Merge sort kraze yon pwoblèm nan pi piti pwoblèm epi answit jwenn rezilta pwoblèm ki pi piti yo pou jwenn rezilta pwoblèm orijinal la (nòt: yo rele kalite algorithm sa a divize ak konkeri). Si ou pa konprann algorithm sa a, pa enkyete; Mwen pat konprann li premye fwa mwen te wè li. Si li ka ede w, mwen wè algorithm sa a kòm yon algorithm de-faz:

  • Faz divizyon, kote etalaj la divize an pi piti etalaj
  • Faz klasman an se kote ti etalaj yo konbine (lè l sèvi avèk sendika) yo fòme yon etalaj pi gwo.

Faz divizyon

Kijan baz done relasyon travay (pati 1)

Nan etap divizyon an, etalaj la divize an etalaj inite nan 3 etap. Nimewo fòmèl etap yo se log(N) (depi N=8, log(N) = 3).

Kouman pou mwen konnen sa a?

Mwen se jeni! Nan yon mo - matematik. Lide a se ke chak etap divize gwosè a nan etalaj orijinal la pa 2. Nimewo a nan etap se kantite fwa ou ka divize etalaj orijinal la an de. Sa a se definisyon egzak yon logaritm (baz 2).

Faz klasman

Kijan baz done relasyon travay (pati 1)

Nan faz klasman an, ou kòmanse ak etalaj inite (yon sèl-eleman). Pandan chak etap ou aplike plizyè operasyon fizyon ak pri total la se N = 8 operasyon:

  • Nan premye etap la ou gen 4 fusions ki koute 2 operasyon yo chak
  • Nan dezyèm etap la ou gen 2 fusions ki koute 4 operasyon yo chak
  • Nan twazyèm etap la ou gen 1 fizyone ki koute 8 operasyon

Depi gen log(N) etap, pri total N * log(N) operasyon yo.

Avantaj nan sòt fizyone

Poukisa algorithm sa a tèlman pwisan?

Paske:

  • Ou ka chanje li pou redwi anprint memwa pou ou pa kreye nouvo etalaj men dirèkteman modifye etalaj la opinyon.

Remak: yo rele sa a ki kalite algorithm in-kote (triye san memwa adisyonèl).

  • Ou ka chanje li pou sèvi ak espas ki gen kapasite ak yon ti kantite memwa an menm tan san yo pa antrene siyifikatif disk I/O anlè. Lide a se chaje nan memwa sèlman pati sa yo ki aktyèlman ap trete. Sa a enpòtan lè ou bezwen sòt yon tab milti-gigaocte ak sèlman yon tanpon memwa 100-megaocte.

Remak: yo rele sa a ki kalite algorithm sort ekstèn.

  • Ou ka chanje li pou kouri sou plizyè pwosesis / fil / sèvè.

Pou egzanp, distribye fizyon sòt se youn nan eleman kle yo Hadoop (ki se yon estrikti nan gwo done).

  • Algorithm sa a ka vire plon an lò (vrèman!).

Sa a se algorithm klasman yo itilize nan pifò (si se pa tout) baz done, men li se pa youn nan sèlman. Si ou vle konnen plis, ou ka li sa a travay rechèch, ki diskite avantaj yo ak dezavantaj nan algoritm klasman baz done komen.

Etalaj, pye bwa ak tab Hash

Kounye a ke nou konprann lide konpleksite tan ak klasman, mwen ta dwe di w sou 3 estrikti done. Sa a enpòtan paske yo se baz baz done modèn. Mwen pral tou prezante konsèp la endèks baz done.

Tablo

Yon etalaj ki genyen de dimansyon se estrikti done ki pi senp. Yon tab ka konsidere kòm yon etalaj. Pa egzanp:

Kijan baz done relasyon travay (pati 1)

Etalaj 2 dimansyon sa a se yon tab ki gen ranje ak kolòn:

  • Chak liy reprezante yon antite
  • Kolòn magazen pwopriyete ki dekri antite a.
  • Chak kolòn estoke done nan yon kalite espesifik (nonb antye relatif, fisèl, dat...).

Sa a se pratik pou estoke ak vizyalize done, sepandan, lè ou bezwen jwenn yon valè espesifik, sa a pa apwopriye.

Pou egzanp, si ou te vle jwenn tout mesye yo ki travay nan UK a, ou ta bezwen gade nan chak ranje pou detèmine si ranje sa a ki dwe nan UK a. Li pral koute ou N tranzaksyonkote N - kantite liy, ki pa move, men ta ka gen yon fason pi vit? Kounye a li lè pou nou fè konesans ak pye bwa yo.

Remak: Pifò baz done modèn bay etalaj pwolonje pou estoke tab yo yon fason efikas: tab-organizedtables ak tab-organized-endèks. Men, sa a pa chanje pwoblèm nan byen vit jwenn yon kondisyon espesifik nan yon gwoup kolòn.

Pyebwa baz done ak endèks

Yon pye bwa rechèch binè se yon pye bwa binè ak yon pwopriyete espesyal, kle nan chak ne dwe:

  • pi gran pase tout kle ki estoke nan subtree gòch la
  • mwens pase tout kle ki estoke nan subtree dwat la

Ann wè sa sa vle di vizyèlman

Lide

Kijan baz done relasyon travay (pati 1)

Pye bwa sa a gen N = 15 eleman. Ann di mwen ap chèche pou 208:

  • Mwen kòmanse nan rasin lan ki gen kle se 136. Depi 136<208, mwen gade nan subtree dwat la nan ne 136.
  • 398>208 Se poutèt sa, m ap gade sous-arbre gòch nan ne 398
  • 250>208 Se poutèt sa, m ap gade sous-arbre gòch nan ne 250
  • 200<208, se poutèt sa m ap gade sous-arbre dwat nan ne 200. Men, 200 pa gen okenn sous-arbre dwat, valè pa egziste (paske si li egziste, li pral nan subtree dwat 200).

Koulye a, ann di mwen ap chèche pou 40

  • Mwen kòmanse nan rasin ki gen kle a se 136. Depi 136 > 40, mwen gade nan subtree gòch la nan ne 136.
  • 80 > 40, pakonsekan mwen ap gade soubtree gòch la nan ne 80
  • 40 = 40, ne egziste. Mwen rekipere ID ranje andedan ne la (pa montre nan foto a) epi gade nan tablo a pou ID ranje yo bay la.
  • Konnen ID ranje a pèmèt mwen konnen egzakteman ki kote done yo ye nan tablo a, pou mwen ka rekipere li imedyatman.

Nan fen a, tou de rechèch ap koute m 'kantite nivo andedan pye bwa a. Si ou li pati sou sòt fusion ak anpil atansyon, ou ta dwe wè ke gen nivo log(N). Li sanble, rechèch pri log (N), pa mal!

Ann retounen sou pwoblèm nou an

Men, sa a trè abstrè, kidonk ann tounen nan pwoblèm nou an. Olye de yon nonb antye ki senp, imajine yon fisèl ki reprezante peyi yon moun nan tablo anvan an. Ann di ou gen yon pye bwa ki gen jaden "peyi" (kolòn 3) nan tablo a:

  • Si ou vle konnen ki moun ki travay nan UK a
  • ou gade pye bwa a pou w jwenn ne ki reprezante Grann Bretay
  • andedan "UKnode" w ap jwenn kote dosye travayè UK yo.

Rechèch sa a ap koute operasyon log(N) olye de N operasyon si ou itilize etalaj la dirèkteman. Sa ou sot prezante a te endèks baz done.

Ou ka bati yon pye bwa endèks pou nenpòt gwoup jaden (fisèl, nimewo, 2 liy, nimewo ak fisèl, dat...) toutotan ou gen yon fonksyon pou konpare kle (sa vle di gwoup jaden) pou ou ka mete lòd nan mitan kle yo (ki se ka a pou nenpòt kalite debaz nan baz done a).

B + TreeIndex

Pandan ke pye bwa sa a travay byen pou jwenn yon valè espesifik, gen yon GWO pwoblèm lè ou bezwen jwenn plizyè eleman ant de valè. Sa ap koute O(N) paske w ap oblije gade chak ne nan pye bwa a epi tcheke si li se ant de valè sa yo (egzanp ak yon parcours òdone nan pye bwa a). Anplis, operasyon sa a se pa disk I/O zanmitay depi ou gen li tout pyebwa a. Nou bezwen jwenn yon fason pou egzekite avèk efikasite demann ranje. Pou rezoud pwoblèm sa a, baz done modèn itilize yon vèsyon modifye nan pye bwa anvan an ki rele B + Tree. Nan yon pye bwa B + Tree:

  • sèlman nœuds ki pi ba yo (fèy) enfòmasyon magazen (kote ranje nan tablo ki gen rapò a)
  • rès nœuds yo isit la pou routage nan ne ki kòrèk la pandan rechèch la.

Kijan baz done relasyon travay (pati 1)

Kòm ou ka wè, gen plis nœuds isit la (de fwa). Vreman vre, ou gen nœuds adisyonèl, "nœuds desizyon", ki pral ede w jwenn ne ki kòrèk la (ki estoke kote ranje yo nan tablo ki asosye). Men, konpleksite rechèch la toujou O(log(N)) (gen yon sèl plis nivo). Gwo diferans lan se sa nœuds nan nivo ki pi ba yo konekte ak siksesè yo.

Avèk B+Tree sa a, si w ap chèche valè ant 40 ak 100:

  • Ou jis bezwen chèche 40 (oswa valè ki pi pre apre 40 si 40 pa egziste) tankou ou te fè ak pye bwa anvan an.
  • Lè sa a, kolekte 40 eritye lè l sèvi avèk lyen eritye dirèk jiskaske ou rive nan 100.

Ann di ou jwenn M siksesè ak pye bwa a gen N nœuds. Jwenn yon ne espesifik koute log(N) tankou pye bwa anvan an. Men, yon fwa ou jwenn ne sa a, ou pral jwenn siksesè M nan operasyon M ak referans a siksesè yo. Rechèch sa a koute sèlman M+log(N) operasyon konpare ak N operasyon sou pye bwa anvan an. Anplis, ou pa oblije li pye bwa a plen (sèlman M + log(N) nœuds), ki vle di mwens itilizasyon disk. Si M piti (egzanp 200 ranje) ak N gwo (1 ranje), pral gen yon GWO diferans.

Men, gen nouvo pwoblèm isit la (ankò!). Si ou ajoute oswa efase yon ranje nan baz done a (ak Se poutèt sa nan endèks B + Tree ki asosye):

  • ou dwe kenbe lòd ant nœuds yo andedan yon B + Tree, otreman ou pa yo pral kapab jwenn nœuds yo andedan yon pye bwa ki pa klase.
  • ou dwe kenbe kantite minimòm posib nan nivo nan B + Tree, otreman O (log (N)) tan konpleksite vin O (N).

Nan lòt mo, B + Tree dwe pwòp tèt ou-kòmande ak ekilibre. Erezman, sa a se posib ak operasyon entelijan efase ak insert. Men, sa a vini nan yon pri: ensèsyon ak sipresyon nan yon pye bwa B + koute O (log (N)). Se poutèt sa kèk nan nou te tande sa lè l sèvi avèk twòp endèks se pa yon bon lide. Vrèman, w ap ralanti rapid insert / aktyalizasyon / efase nan yon ranje nan yon tabpaske baz done a bezwen mete ajou endis tab la lè l sèvi avèk yon operasyon chè O(log(N)) pou chak endèks. Anplis, ajoute endèks vle di plis kantite travay pou manadjè tranzaksyon yo (yo pral dekri nan fen atik la).

Pou plis detay, ou ka wè atik Wikipedya sou B+Pyebwa. Si ou vle yon egzanp aplikasyon B + Tree nan yon baz done, gade atik sa a и atik sa a soti nan yon pwomotè MySQL dirijan. Yo tou de konsantre sou fason InnoDB (motè MySQL) okipe endèks yo.

Remak: Yon lektè te di m ke, akòz optimize nivo ki ba, pye bwa a B + ta dwe konplètman ekilibre.

Hashtable

Dènye estrikti done enpòtan nou an se tab hash la. Sa a trè itil lè ou vle byen vit gade valè yo. Anplis, konprann yon tab hash pral ede nou pita konprann yon operasyon komen baz done rantre yo rele yon hash join ( hash join). Estrikti done sa a tou itilize pa baz done a pou estoke kèk bagay entèn (egzanp. fèmen tab la oswa pisin tanpon, nou pral wè tou de konsèp sa yo pita).

Yon tab hash se yon estrikti done ki byen vit jwenn yon eleman pa kle li yo. Pou konstwi yon tab hash ou bezwen defini:

  • siy pou eleman ou yo
  • fonksyon hash pou kle. Hashes kle yo kalkile bay kote eleman yo (yo rele segman ).
  • fonksyon pou konpare kle yo. Yon fwa ou jwenn segman ki kòrèk la, ou dwe jwenn eleman w ap chèche a nan segman an lè l sèvi avèk konparezon sa a.

Egzanp senp

Ann pran yon egzanp klè:

Kijan baz done relasyon travay (pati 1)

Tablo hash sa a gen 10 segman. Paske mwen parese, mwen sèlman foto 5 segman, men mwen konnen ou se entelijan, kidonk mwen pral kite ou imajine lòt 5 yo poukont ou. Mwen te itilize yon fonksyon hash modulo 10 nan kle a. Nan lòt mo, mwen estoke sèlman dènye chif kle eleman an pou jwenn segman li yo:

  • si dènye chif la se 0, eleman an tonbe nan segman 0,
  • si dènye chif la se 1, eleman an tonbe nan segman 1,
  • si dènye chif la se 2, eleman an tonbe nan zòn 2,
  • ...

Fonksyon konparezon mwen te itilize a se tou senpleman egalite ant de nonm antye.

Ann di ou vle jwenn eleman 78:

  • Tablo hash la kalkile kòd hash pou 78, ki se 8.
  • Tablo hash la gade segman 8, ak premye eleman li jwenn se 78.
  • Li retounen atik 78 ba ou
  • Rechèch koute sèlman 2 operasyon (yonn pou kalkile valè hash la ak lòt la pou gade eleman ki nan segman an).

Koulye a, an n di ou vle jwenn eleman 59:

  • Tablo hash la kalkile kòd hash pou 59, ki se 9.
  • Tablo hash la chèche nan segman 9, premye eleman yo jwenn se 99. Depi 99!=59, eleman 99 pa yon eleman valab.
  • Sèvi ak menm lojik la, yo pran dezyèm eleman (9), twazyèm (79), ..., dènye (29).
  • Eleman pa jwenn.
  • Rechèch la koute 7 operasyon.

Bon fonksyon hash

Kòm ou ka wè, depann sou valè a ou ap chèche a, pri a pa menm!

Si kounye a mwen chanje fonksyon hash modulo 1 nan kle a (ki se, pran dènye 000 chif yo), dezyèm rechèch la sèlman koute 000 operasyon paske pa gen okenn eleman nan segman 6. Vrè defi a se jwenn yon bon fonksyon hash ki pral kreye bokit ki gen yon ti kantite eleman.

Nan egzanp mwen an, jwenn yon bon fonksyon hash se fasil. Men, sa a se yon egzanp senp, jwenn yon bon fonksyon hash se pi difisil lè kle a se:

  • fisèl (pa egzanp - siyati)
  • 2 liy (pa egzanp - siyati ak non)
  • 2 liy ak dat (pa egzanp - siyati, non ak dat nesans)
  • ...

Avèk yon bon fonksyon hash, rechèch tab hash koute O (1).

Tablo vs hash tab

Poukisa nou pa sèvi ak yon etalaj?

Hmm, bon kesyon.

  • Tablo hash la kapab pasyèlman chaje nan memwa, ak segman ki rete yo ka rete sou disk la.
  • Avèk yon etalaj ou dwe itilize espas kontigue nan memwa. Si w ap chaje yon tab gwo li trè difisil pou jwenn ase espas kontinyèl.
  • Pou yon tab hash, ou ka chwazi kle ou vle a (pa egzanp, peyi ak siyati moun).

Pou plis enfòmasyon, ou ka li atik la sou JavaHashMap, ki se yon aplikasyon efikas nan yon tab hash; ou pa bezwen konprann Java pou konprann konsèp yo kouvri nan atik sa a.

Sous: www.habr.com

Add nouvo kòmantè