Aloha, Habr! Ke hāʻawi aku nei au iā ʻoe i kahi unuhi o ka ʻatikala
I ka wā e pili ana i nā ʻikepili pili ʻaʻole hiki iaʻu ke noʻonoʻo ua nalowale kekahi mea. Hoʻohana ʻia lākou ma nā wahi āpau. Nui nā ʻikepili like ʻole i loaʻa, mai ka SQLite liʻiliʻi a pono hoʻi i ka Teradata ikaika. Akā he mau ʻatikala wale nō e wehewehe i ka hana ʻana o ka waihona. Hiki iā ʻoe ke ʻimi iā ʻoe iho me ka "howdoesarelationaldatabasework" e ʻike i ka liʻiliʻi o nā hopena. Eia kekahi, pōkole kēia mau ʻatikala. Inā ʻoe e ʻimi nei i nā ʻenehana buzzy hou loa (BigData, NoSQL a i ʻole JavaScript), e ʻike ʻoe i nā ʻatikala hohonu hou aʻe e wehewehe ana i kā lākou hana.
He ʻelemakule loa nā ʻikepili pili i ka wehewehe ʻana ma waho o nā papa kulanui, nā pepa noiʻi a me nā puke?
Ma ke ʻano he mea hoʻomohala, inaina wau i ka hoʻohana ʻana i kahi mea aʻu i maopopo ʻole ai. A inā ua hoʻohana ʻia nā ʻikepili ma mua o 40 mau makahiki, pono ke kumu. I loko o nā makahiki, ua hoʻohana wau i mau haneli mau hola e hoʻomaopopo maoli i kēia mau pahu ʻeleʻele ʻē aʻe aʻu e hoʻohana ai i kēlā me kēia lā. ʻIkepili pili hoihoi loa no ka mea ma muli o nā manaʻo pono a hoʻohana hou ʻia. Inā makemake ʻoe i ka hoʻomaopopo ʻana i kahi waihona, akā ʻaʻole i loaʻa ka manawa a i ʻole ka makemake e komo i kēia kumuhana ākea, pono ʻoe e hauʻoli i kēia ʻatikala.
ʻOiai maopopo ke poʻo o kēia ʻatikala, ʻO ke kumu o kēia ʻatikala ʻaʻole ia e hoʻomaopopo i ka hoʻohana ʻana i ka waihona. No laila, pono ʻoe e ʻike pehea e kākau ai i kahi noi pili maʻalahi a me nā nīnau kumu RAW; a i ʻole, ʻaʻole maopopo ʻoe i kēia ʻatikala. ʻO ia wale nō ka mea e pono ai ʻoe e ʻike, e wehewehe wau i ke koena.
E hoʻomaka wau me kekahi mau kumu ʻepekema kamepiula, e like me ka paʻakikī o ka manawa o nā algorithms (BigO). ʻIke wau i kekahi o ʻoukou inaina i kēia manaʻo, akā inā ʻaʻole hiki iā ʻoe ke hoʻomaopopo i nā mea paʻakikī i loko o ka waihona. No ka mea, he kumuhana nui keia, E kālele ana au ka mea a'u i manao ai he mea nui: pehea ka hana o ka waihona SQL ninau. E hoʻolauna wale wau nā manaʻo waihona waihonano laila ma ka hopena o ka ʻatikala e loaʻa iā ʻoe kahi manaʻo o ka mea e hana nei ma lalo o ka pā.
No ka mea he ʻatikala lōʻihi a ʻenehana kēia e pili ana i ka nui o nā algorithms a me nā hoʻolālā data, e lawe i kou manawa e heluhelu ai. Paʻakikī paha ke hoʻomaopopo ʻana i kekahi mau manaʻo; hiki iā ʻoe ke hoʻokuʻu iā lākou a loaʻa mau ka manaʻo nui.
No ka poʻe ʻike i waena o ʻoukou, ua māhele ʻia kēia ʻatikala i 3 mau ʻāpana:
- ʻO ka nānā nui o nā mea haʻahaʻa haʻahaʻa a me ka pae kiʻekiʻe
- Nānā o ke kaʻina hana hoʻoponopono nīnau
- ʻO ka nānā ʻana o ka hoʻokele waiwai a me ka Buffer Pool
Hoʻi i nā kumu
I nā makahiki i hala aku nei (ma kahi galaxy mamao, mamao loa ...), pono e ʻike pono nā mea hoʻomohala i ka helu o nā hana a lākou e hoʻopili nei. Ua ʻike lākou i kā lākou algorithms a me nā hoʻonohonoho ʻikepili ma ka puʻuwai no ka mea ʻaʻole hiki iā lākou ke hoʻopau i ka CPU a me ka hoʻomanaʻo ʻana i kā lākou kamepiula lohi.
Ma kēia ʻāpana, e hoʻomanaʻo wau iā ʻoe i kekahi o kēia mau manaʻo no ka mea he mea nui ia i ka hoʻomaopopo ʻana i ka waihona. E hoʻolauna pū wau i ka manaʻo waihona waihona.
O(1) vs O(n2)
I kēia mau lā, nui nā mea hoʻomohala ʻaʻole mālama i ka paʻakikī o ka manawa o nā algorithms ... a ua pololei lākou!
Akā inā pili ʻoe i ka ʻikepili he nui (ʻaʻole wau e kamaʻilio mau tausani) a inā ʻoe e hakakā nei i nā milliseconds, lilo ia i mea koʻikoʻi e hoʻomaopopo i kēia manaʻo. A e like me kāu e noʻonoʻo ai, pono nā ʻikepili i nā kūlana ʻelua! ʻAʻole wau e hoʻolilo iā ʻoe i kahi manawa hou aʻe ma mua o ka mea e pono ai e kiʻi i ka manaʻo. E kōkua kēia iā mākou e hoʻomaopopo i ka manaʻo o ka loiloi kumu kūʻai ma hope (kāki ka nānā ' hiʻona).
Kuhi
Paʻakikī manawa o ka algorithm hoʻohana e ʻike i ka lōʻihi o kahi algorithm e hoʻopau ai no ka nui o ka ʻikepili. No ka wehewehe ʻana i kēia paʻakikī, hoʻohana mākou i ka helu makemakika nui O. Hoʻohana ʻia kēia notation me kahi hana e wehewehe ana i ka nui o nā hana e pono ai kahi algorithm no kahi helu o nā mea hoʻokomo.
No ka laʻana, i kaʻu ʻōlelo ʻana "he paʻakikī kēia algorithm O (some_function ())", ʻo ia ka mea e koi ai ka algorithm i kekahi hana_function (a_certain_amount_of_data) e hana i kahi nui o ka ʻikepili.
pela ʻAʻole ka nui o ka ʻikepili ka mea nui**, i ole ia ** pehea e hoʻonui ai ka nui o nā hana me ka hoʻonui ʻana i ka nui o ka ʻikepili. ʻAʻole hāʻawi ka paʻakikī o ka manawa i ka helu pololei o nā hana, akā he ala maikaʻi ia e koho ai i ka manawa hoʻokō.
Ma kēia pakuhi hiki iā ʻoe ke ʻike i ka helu o nā hana me ka nui o ka ʻikepili hoʻokomo no nā ʻano like ʻole o ka algorithm manawa paʻakikī. Ua hoʻohana au i ka unahi logarithmic e hōʻike iā lākou. I nā huaʻōlelo ʻē aʻe, piʻi koke ka nui o ka ʻikepili mai ka 1 a hiki i ka 1 biliona. Hiki iā mākou ke ʻike i kēlā:
- ʻO (1) a i ʻole ka paʻakikī mau e mau ana (inā ʻaʻole e kapa ʻia ʻo ia ka paʻakikī mau).
- O(mōʻaukala(n)) noho haʻahaʻa me nā piliona ʻikepili.
- ʻO ka pilikia nui loa - O(n2), kahi e ulu wikiwiki ai ka nui o na hana.
- Piʻi aʻe nā pilikia ʻelua e like me ka wikiwiki.
examples
Me ka liʻiliʻi o ka ʻikepili, hiki ʻole ke ʻokoʻa ma waena o O(1) a me O(n2). No ka laʻana, e ʻōlelo mākou he algorithm kāu e pono ai e hoʻoponopono i nā mea 2000.
- ʻO ka algorithm O(1) e uku iā ʻoe i 1 hana
- ʻO ka O(log(n)) algorithm e uku iā ʻoe i 7 mau hana
- E lilo ana ka O(n) algorithm iā ʻoe i 2 mau hana
- ʻO ka algorithm O(n*log(n)) e uku iā ʻoe i 14 mau hana
- ʻO ka algorithm O(n2) e uku iā ʻoe i 4 mau hana
ʻO ka ʻokoʻa ma waena o O(1) a me O(n2) me he mea lā nui (4 miliona mau hana) akā e nalowale ana ʻoe i ka 2 ms ka lōʻihi, ʻo ka manawa wale nō e ʻapo ai kou mau maka. ʻOiaʻiʻo, hiki i nā mea hana hou ke hana
E like me kaʻu i ʻōlelo ai, he mea nui ia e ʻike i kēia manaʻo i ka wā e hana ai me ka nui o ka ʻikepili. Inā i kēia manawa e hoʻoponopono ka algorithm i nā mea 1 (ʻaʻole ia he nui no kahi waihona):
- ʻO ka algorithm O(1) e uku iā ʻoe i 1 hana
- ʻO ka O(log(n)) algorithm e uku iā ʻoe i 14 mau hana
- ʻO ka algorithm O(n) e uku iā ʻoe i 1 mau hana
- ʻO ka algorithm O(n*log(n)) e uku iā ʻoe i 14 mau hana
- ʻO ka algorithm O(n2) e uku iā ʻoe i 1 mau hana.
ʻAʻole wau i hana i ka makemakika, akā e ʻōlelo wau me ka algorithm O(n2) loaʻa iā ʻoe ka manawa e inu ai i kahi kofe (ʻelua paha!). Inā hoʻohui ʻoe i kahi 0 hou i ka nui o ka ʻikepili, e loaʻa iā ʻoe ka manawa e hiamoe ai.
E hele hohonu kākou
No kaʻike:
- ʻIke ʻia ka ʻimi papaʻaina hash maikaʻi i kahi mea ma O(1).
- ʻO ka ʻimi ʻana i kahi lāʻau kaulike maikaʻi e hoʻopuka i nā hopena ma O(log(n)).
- ʻO ka huli ʻana i kahi laʻana e loaʻa ai nā hopena ma O(n).
- Loaʻa ka paʻakikī O (n*log(n)) nā algorithms sorting maikaʻi loa.
- He paʻakikī O(n2) ka algorithm sorting maikaʻi ʻole.
'Ōlelo Aʻo: Ma nā ʻāpana aʻe e ʻike mākou i kēia mau algorithm a me nā hoʻonohonoho ʻikepili.
Aia kekahi mau ʻano o ka paʻakikī manawa algorithm:
- kūlana hihia maʻamau
- ʻo ke kūlana maikaʻi loa
- a me ke kūlana ʻino loa
ʻO ka paʻakikī o ka manawa ka mea ʻino loa.
Ke kamaʻilio wale nei wau e pili ana i ka paʻakikī o ka manawa o ka algorithm, akā pili pū ka paʻakikī i:
- hoʻohana hoʻomanaʻo o ka algorithm
- disk I/O hoʻohana algorithm
ʻOiaʻiʻo, aia nā pilikia i ʻoi aku ka maikaʻi ma mua o n2, no ka laʻana:
- n4: weliweli kēia! ʻO kekahi o nā algorithms i ʻōlelo ʻia he paʻakikī kēia.
- 3n: ʻoi aku ka ʻino o kēia! ʻO kekahi o nā algorithms a mākou e ʻike ai ma waena o kēia ʻatikala he paʻakikī kēia (a ua hoʻohana maoli ʻia i nā ʻikepili he nui).
- factorial n: ʻaʻole loaʻa ʻoe i kāu mau hopena me ka liʻiliʻi o ka ʻikepili.
- nn: Inā ʻike ʻoe i kēia paʻakikī, pono ʻoe e nīnau iā ʻoe iho inā ʻo kēia kāu kahua hana...
'Ōlelo Aʻo: ʻAʻole wau i hāʻawi iā ʻoe i ka wehewehe maoli o ka inoa O nui, he manaʻo wale nō. Hiki iā ʻoe ke heluhelu i kēia ʻatikala ma
MergeSort
He aha kāu e hana ai inā pono ʻoe e hoʻokaʻawale i kahi hōʻiliʻili? He aha? Kāhea ʻoe i ka hana ʻano () ... ʻAe, pane maikaʻi ... Akā no kahi waihona, pono ʻoe e hoʻomaopopo i ka hana ʻana o kēia ʻano ().
Aia kekahi mau algorithms sorting maikaʻi, no laila e nānā au i ka mea nui loa: hoʻohui ʻano. ʻAʻole paha ʻoe e maopopo i ke kumu e pono ai ka hoʻokaʻawale ʻana i ka ʻikepili i kēia manawa, akā pono ʻoe ma hope o ka ʻāpana hulina hulina. Eia kekahi, ʻo ka hoʻomaopopo ʻana i ke ʻano merge e kōkua iā mākou e hoʻomaopopo i ka hana hoʻohui maʻamau i kapa ʻia Ho'ohui hui (hui hui).
Hoʻohui
E like me ka nui o nā algorithms pono, e hilinaʻi ana ka hoʻohui ʻana i kahi hoʻopunipuni: ʻo ka hui ʻana i 2 mau pūʻulu i hoʻokaʻawale ʻia o ka nui N/2 i loko o kahi papa kuhikuhi N-element e kūʻai i nā hana N wale nō. Kapa ʻia kēia hana ʻo ka hui ʻana.
E ʻike kākou i ke ʻano o kēia me kahi laʻana maʻalahi:
Hōʻike kēia kiʻi i ke kūkulu ʻana i ka hoʻonohonoho hope 8-element, pono ʻoe e hoʻololi i hoʻokahi manawa ma luna o nā ʻāpana 2 4-element. No ka mea, ua hoʻokaʻawale mua ʻia nā ʻāpana 4-element ʻelua:
- 1) hoʻohālikelike ʻoe i nā mea ʻelua i kēia manawa i ʻelua arrays (ma ka hoʻomaka ʻana i kēia manawa = mua)
- 2) a laila e lawe i ka mea liʻiliʻi loa e hoʻokomo iā ia i loko o kahi ʻāpana 8 element
- 3) a neʻe i ka mea aʻe i loko o ka array kahi āu i lawe ai i ka mea liʻiliʻi loa
- a e hana hou i ka 1,2,3 a hiki i ka mea hope loa o kekahi o nā arrays.
- A laila, lawe ʻoe i nā mea i koe o ka ʻāpana ʻē aʻe e hoʻokomo iā lākou i loko o kahi ʻano mea 8.
Hana ʻia kēia no ka mea ua hoʻokaʻawale ʻia nā ʻāpana 4-element ʻelua a no laila ʻaʻole pono ʻoe e "hoʻi" i kēlā mau papa.
I kēia manawa ke hoʻomaopopo nei mākou i ka hoʻopunipuni, eia kaʻu pseudocode no ka hui ʻana:
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;
Hoʻokaʻawale ka ʻano hoʻohui i kahi pilikia i nā pilikia liʻiliʻi a laila ʻike i nā hopena o nā pilikia liʻiliʻi e loaʻa ai ka hopena o ka pilikia kumu (e hoʻomaopopo: ua kapa ʻia kēia ʻano algorithm he divide and conquer). Inā ʻaʻole ʻoe maopopo i kēia algorithm, mai hopohopo; ʻAʻole maopopo iaʻu i ka manawa mua aʻu i ʻike ai. Inā hiki ke kōkua iā ʻoe, ʻike wau i kēia algorithm ma ke ʻano he ʻelua-phase algorithm:
- Māhele mahele, kahi e māhele ʻia ai ka laha i nā ʻāpana liʻiliʻi
- ʻO ka ʻāpana hoʻokaʻawale kahi i hui ʻia ai nā ʻāpana liʻiliʻi (me ka hoʻohana ʻana i ka union) e hana i kahi ʻano nui.
Māhele mahele
Ma ka mahele mahele, ua maheleia ka laha i na huikau hookahi i 3 mau kapuai. ʻO ka helu maʻamau o nā ʻanuʻu he log(N) (no ka mea, N=8, log(N) = 3).
Pehea wau e ʻike ai i kēia?
He akamai wau! Ma kahi huaʻōlelo - makemakika. ʻO ka manaʻo, ʻo kēlā me kēia ʻanuʻu e puʻunaue i ka nui o ka papa kuhikuhi mua me 2. ʻO ka helu o nā ʻanuʻu ka helu o nā manawa hiki iā ʻoe ke puʻunaue i ka hui kumu i ʻelua. ʻO kēia ka wehewehe pololei o ka logarithm (base 2).
Māhele koho
I ka papa hoʻokaʻawale, hoʻomaka ʻoe me nā ʻano hui pū kekahi (hoʻokahi-element). I loko o kēlā me kēia kaʻina e hoʻohana ʻoe i nā hana hoʻohui he nui a ʻo ka huina kālā he N = 8 mau hana:
- I ka pae mua loaʻa iā ʻoe nā hui 4 e kūʻai ana i 2 mau hana i kēlā me kēia
- Ma ka ʻanuʻu ʻelua, loaʻa iā ʻoe nā hui 2 e uku ana i 4 mau hana i kēlā me kēia
- Ma ka ʻanuʻu ʻekolu, loaʻa iā ʻoe ka hui ʻana 1 e uku ana i nā hana 8
No ka mea aia nā ʻanuʻu log(N), huina kālā N * log(N) hana.
Nā pōmaikaʻi o ka hoʻohui ʻana
No ke aha i ikaika loa ai kēia algorithm?
No ka mea:
- Hiki iā ʻoe ke hoʻololi iā ia e hōʻemi i ka wāwae hoʻomanaʻo i ʻole ʻoe e hana i nā arrays hou akā hoʻololi pololei i ka array input.
Hoʻomaopopo: ua kapa ʻia kēia ʻano algorithm
- Hiki iā ʻoe ke hoʻololi iā ia no ka hoʻohana ʻana i kahi diski a me kahi hoʻomanaʻo liʻiliʻi i ka manawa like me ka loaʻa ʻole o ka nui o ka disk I/O ma luna. ʻO ka manaʻo e hoʻouka i loko o ka hoʻomanaʻo i nā ʻāpana wale nō e hana ʻia nei. He mea koʻikoʻi kēia inā pono ʻoe e hoʻokaʻawale i kahi papaʻaina multi-gigabyte me kahi pahu hoʻomanaʻo 100-megabyte wale nō.
Hoʻomaopopo: ua kapa ʻia kēia ʻano algorithm
- Hiki iā ʻoe ke hoʻololi iā ia e holo ma nā kaʻina hana / thread / server.
No ka laʻana, ʻo ke ʻano hui pū ʻia i hoʻokaʻawale ʻia kekahi o nā mea nui
- Hiki i kēia algorithm ke hoʻohuli i ke alakaʻi i ke gula (ʻoiaʻiʻo!).
Hoʻohana ʻia kēia algorithm sorting ma ka hapa nui (inā ʻaʻole nā mea āpau) ʻikepili, akā ʻaʻole ia wale nō. Inā makemake ʻoe e ʻike hou aku, hiki iā ʻoe ke heluhelu i kēia
Papa Laau, Laau a me Hash
I kēia manawa ke hoʻomaopopo nei mākou i ka manaʻo o ka paʻakikī o ka manawa a me ka hoʻokaʻawale ʻana, pono wau e haʻi iā ʻoe e pili ana i 3 mau hanana data. He mea nui kēia no lākou ʻo ia ke kumu o nā ʻikepili hou. E hoʻolauna pū wau i ka manaʻo waihona waihona.
Hoʻoulu
ʻO ka papa hana ʻelua-dimensional ka mea maʻalahi loa. Hiki ke noʻonoʻo ʻia kahi papaʻaina ma ke ʻano he array. ʻo kahi laʻana:
He papa ʻaina kēia ʻāpana ʻelua me nā lālani a me nā kolamu:
- Hōʻike kēlā me kēia laina i kahi hui
- Mālama nā kolamu i nā waiwai e wehewehe ana i ka hui.
- Mālama kēlā me kēia kolamu i ka ʻikepili o kahi ʻano kikoʻī (integer, string, date...).
He mea maʻalahi kēia no ka mālama ʻana a me ka nānā ʻana i ka ʻikepili, akā, inā pono ʻoe e ʻimi i kahi waiwai kikoʻī, ʻaʻole kūpono kēia.
No ka laʻana, inā makemake ʻoe e ʻimi i nā kāne a pau e hana ana ma UK, pono ʻoe e nānā i kēlā me kēia lālani e hoʻoholo ai inā no UK kēlā lālani. E uku ia iā ʻoe i nā hana Nkahi N - ka helu o nā laina, ʻaʻole hewa, akā hiki ke ala wikiwiki? ʻO ka manawa kēia e kamaʻāina ai kākou i nā lāʻau.
'Ōlelo Aʻo: Hāʻawi ka hapa nui o nā ʻikepili hou i nā papa kuhikuhi no ka mālama pono ʻana i nā papa: heap-organizedtables a index-organizedtables. Akā,ʻaʻole kēia e hoʻololi i ka pilikia o ka loaʻa kokeʻana o kahi kūlana kūikawā ma kahi hui o nā kolamu.
lāʻau waihona a me ka helu kuhikuhi
ʻO ka lāʻau huli binary he lāʻau binary me kahi waiwai kūikawā, pono ke kī ma kēlā me kēia node:
- ʻoi aku ka nui ma mua o nā kī āpau i mālama ʻia ma ka subtree hema
- liʻiliʻi ma mua o nā kī āpau i mālama ʻia ma ka subtree ʻākau
E ʻike kākou i ke ʻano o kēia ma ka ʻike maka
Manaʻo
He N = 15 mau mea keia laau. E ʻōlelo kākou e ʻimi ana au i 208:
- Hoʻomaka wau ma ke kumu nona ke kī he 136. Mai ka 136<208, nānā au i ka ʻaoʻao ʻākau o ka node 136.
- 398>208 no laila ke nānā nei au i ka subtree hema o ka node 398
- 250>208 no laila ke nānā nei au i ka subtree hema o ka node 250
- 200<208, no laila ke nānā nei au i ka ʻaoʻao ʻākau o ka node 200. Akā, ʻaʻohe kumu kumu kūpono o 200. ʻaʻohe waiwai (no ka mea, inā loaʻa, aia ia ma ka ʻaoʻao ʻākau 200).
E ʻōlelo kākou e ʻimi nei au i 40
- Hoʻomaka wau ma ke kumu nona ke kī he 136. Mai ka 136 > 40, nānā au i ka subtree hema o ka node 136.
- 80 > 40, no laila ke nānā nei au i ka subtree hema o ka node 80
- 40= 40, aia node. Hoʻihoʻi au i ka ID lālani i loko o ka node (ʻaʻole i hōʻike ʻia ma ke kiʻi) a nānā i ka papa no ka ID lālani i hāʻawi ʻia.
- ʻO ka ʻike ʻana i ka ID lālani e hiki iaʻu ke ʻike pono i kahi o ka ʻikepili i ka papaʻaina, no laila hiki iaʻu ke kiʻi koke.
I ka hopena, e uku iaʻu nā hulina ʻelua i ka helu o nā pae i loko o ka lāʻau. Inā heluhelu ʻoe i ka ʻāpana e pili ana i ka hoʻohui ʻana me ke akahele, pono ʻoe e ʻike aia nā pae log (N). ʻIke ʻia, mooolelo kumu kuai huli(N), ʻaʻole maikaʻi ʻole!
E hoʻi kākou i ko kākou pilikia
Akā, he abstract loa kēia, no laila e hoʻi kākou i ko kākou pilikia. Ma kahi o ka integer maʻalahi, e noʻonoʻo i kahi kaula e hōʻike ana i ka ʻāina o kekahi ma ka papa mua. E ʻōlelo kākou he lāʻau kāu i loaʻa ka māla "'āina" (kolu 3) o ka papaʻaina:
- Inā makemake ʻoe e ʻike i ka mea hana ma UK
- e nānā ʻoe i ke kumulāʻau e kiʻi i ka node e hōʻike ana iā Great Britain
- i loko o "UKnode" e ʻike ʻoe i kahi o nā moʻolelo limahana UK.
E uku ana kēia hulina i nā hana log(N) ma mua o nā hana N inā hoʻohana pololei ʻoe i ka array. ʻO ka mea āu i hōʻike ai waihona waihona.
Hiki iā ʻoe ke kūkulu i kahi lāʻau kuhikuhi no kēlā me kēia pūʻulu o nā māla (ka laina, helu, 2 laina, helu a me ke kaula, lā...) inā loaʻa iā ʻoe kahi hana e hoʻohālikelike ai i nā kī (ʻo ia hoʻi nā hui kahua) i hiki iā ʻoe ke hoʻonohonoho. hoʻonohonoho i waena o nā kī (ʻo ia ka hihia no nā ʻano kumu ma ka waihona).
B+LaauIndex
ʻOiai ke hana maikaʻi nei kēia kumulāʻau no ka loaʻa ʻana o kahi waiwai kikoʻī, aia kahi pilikia NUI ke pono ʻoe loaʻa i nā mea he nui ma waena o nā waiwai ʻelua. E lilo kēia i O(N) no ka mea pono ʻoe e nānā i kēlā me kēia node o ka lāʻau a nānā inā aia ma waena o kēia mau waiwai ʻelua (e laʻa me ka hele ʻana o ka lāʻau). Eia kekahi, ʻaʻole ia he disk I/O friendly no ka mea pono ʻoe e heluhelu i ka lāʻau holoʻokoʻa. Pono mākou e ʻimi i kahi ala e hoʻokō pono ai noi laula. No ka hoʻoponopono ʻana i kēia pilikia, hoʻohana nā ʻikepili hou i kahi mana hoʻololi o ka lāʻau mua i kapa ʻia ʻo B+Tree. Ma kahi kumulāʻau B+:
- ʻo nā node haʻahaʻa wale nō (lau) hale kūʻai ʻike (kahi o nā lālani ma ka pākaukau pili)
- ke koena o na node maanei no ke alahele i ka node pololei i ka wā huli.
E like me kāu e ʻike ai, ʻoi aku ka nui o nā nodes ma aneʻi (ʻelua ʻelua). ʻOiaʻiʻo, loaʻa iā ʻoe nā node hou, "nā nodes hoʻoholo", e kōkua iā ʻoe e ʻimi i ka node kūpono (e mālama ana i kahi o nā lālani i ka pākaukau pili). Akā, ʻo O(log(N)) ka paʻakikī o ka ʻimi (he hoʻokahi pae hou aʻe). ʻO ka ʻokoʻa nui kēlā hoʻopili ʻia nā nodes ma ka pae haʻahaʻa i ko lākou mau hope.
Me kēia B+Tree, inā ʻoe e ʻimi nei i nā waiwai ma waena o 40 a me 100:
- Pono ʻoe e ʻimi no 40 (a i ʻole ka waiwai kokoke loa ma hope o 40 inā ʻaʻole 40) e like me kāu i hana ai me ka lāʻau mua.
- A laila e hōʻiliʻili i 40 mau hoʻoilina me ka hoʻohana ʻana i nā loulou hoʻoilina pololei a hiki i ka 100.
E ʻōlelo kākou ua loaʻa iā ʻoe nā mea pani M a he N nodes ka lāʻau. Ke ʻimi nei i kahi lāʻau koina node kūikawā (N) e like me ka lāʻau mua. Akā ke loaʻa iā ʻoe kēia node, e loaʻa iā ʻoe nā mea pani M i nā hana M me nā kuhikuhi i ko lākou mau hope. ʻO kēia hulina ke kumu kūʻai M+log(N) wale nō nā hana i hoʻohālikelike ʻia me nā hana N ma ka lāʻau mua. Eia kekahi, ʻaʻole pono ʻoe e heluhelu i ka lāʻau piha (wale nō M+log(N) nodes), ʻo ia hoʻi ka liʻiliʻi o ka hoʻohana ʻana i ka disk. Inā liʻiliʻi ka M (eg 200 lālani) a nui ka N (1 lālani), e loaʻa ka ʻokoʻa NUI.
Akā aia nā pilikia hou ma ʻaneʻi (hou!). Inā ʻoe e hoʻohui a holoi paha i kahi lālani ma ka waihona (a no laila i ka papa kuhikuhi B+Tree pili):
- Pono ʻoe e mālama i ka hoʻonohonoho ma waena o nā nodes i loko o kahi B+Tree, i ʻole ʻaʻole hiki iā ʻoe ke ʻike i nā nodes i loko o kahi lāʻau i hoʻokaʻawale ʻole ʻia.
- Pono ʻoe e mālama i ka helu haʻahaʻa loa o nā pae ma B+Tree, i ʻole e lilo ka paʻakikī o ka manawa O(log(N)) i O(N).
I nā huaʻōlelo ʻē aʻe, pono ʻo B + Tree e hoʻonohonoho ponoʻī a kaulike. ʻO ka mea pōmaikaʻi, hiki kēia me nā hana holoi a hoʻokomo. Akā, hiki mai kēia ma ke kumu kūʻai: nā hoʻokomo a me ka holoi ʻana i kahi kumulāʻau B+ ke kumu kūʻai O(log(N)). ʻO ia ke kumu i lohe ai kekahi o ʻoukou ʻAʻole maikaʻi ka hoʻohana ʻana i nā index he nui. ʻOiaʻiʻo, ke hoʻolohi nei ʻoe i ka hoʻokomo wikiwiki ʻana/hōʻano hou/holo i kahi lālani ma ka papaʻainano ka mea, pono ka waihona e hoʻololi i nā papa kuhikuhi o ka papaʻaina me ka hoʻohana ʻana i kahi hana O(log(N)) pipiʻi no kēlā me kēia papa kuhikuhi. Eia kekahi, ʻo ka hoʻohui ʻana i nā index ʻoi aku ka nui o ka hana no luna kālepa (e wehewehe ʻia ma ka hope o ka ʻatikala).
No nā kikoʻī hou aku, hiki iā ʻoe ke ʻike i ka ʻatikala Wikipedia ma
Nānā: Ua haʻi mai kahi mea heluhelu iaʻu, ma muli o ka haʻahaʻa haʻahaʻa haʻahaʻa, pono e kaulike ka lāʻau B+.
Hashtable
ʻO kā mākou hoʻolālā ʻikepili koʻikoʻi hope loa ʻo ka papa hash. He mea maikaʻi loa kēia inā makemake ʻoe e ʻimi wikiwiki i nā waiwai. Eia kekahi, ʻo ka hoʻomaopopo ʻana i kahi papa hash e kōkua iā mākou ma hope e hoʻomaopopo i kahi hana hoʻohui maʻamau i kapa ʻia ʻo hash join ( hoʻohui i ka hash). Hoʻohana pū ʻia kēia ʻano ʻikepili e ka waihona e mālama i kekahi mau mea o loko (e.g. paʻa paʻa ai ole ia, loko hoʻopaʻa, e ʻike mākou i kēia mau manaʻo ʻelua ma hope).
ʻO ka papaʻaina hash kahi ʻano ʻikepili e ʻike koke i kahi mea ma kāna kī. No ke kūkulu ʻana i kahi papa hash pono ʻoe e wehewehe:
- ʻike no kāu mau mea
- hana hash no na ki. Hāʻawi nā hashes kī helu i kahi o nā mea (kapa ʻia ʻāpana ).
- hana no ka hoohalike ana i na ki. Ke loaʻa iā ʻoe ka ʻāpana kūpono, pono ʻoe e ʻimi i ka mea āu e ʻimi nei i loko o ka māhele me ka hoʻohana ʻana i kēia hoʻohālikelike.
Laʻana maʻalahi
E lawe kākou i kekahi laʻana maopopo.
He 10 mau ʻāpana kēia pākaukau hash. No ka moloā, ua kiʻi wale au i 5 mau ʻāpana, akā ʻike wau he akamai ʻoe, no laila e ʻae wau iā ʻoe e kiʻi i nā ʻāpana ʻē aʻe ma kāu iho. Ua hoʻohana au i kahi hana hash modulo 5 o ke kī. I nā huaʻōlelo ʻē aʻe, mālama wau i ka helu hope loa o ke kī o ka mea e ʻike ai i kāna ʻāpana:
- inā he 0 ka huahelu hope, hāʻule ka mea i ka māhele 0,
- inā he 1 ka huahelu hope, hāʻule ka mea i ka māhele 1,
- inā he 2 ka huahelu hope, hāʻule ka mea i ka ʻāpana 2,
- ...
ʻO ka hana hoʻohālikelike aʻu i hoʻohana ai he kaulike ma waena o ʻelua integer.
E ʻōlelo mākou makemake ʻoe e kiʻi i ka element 78:
- Heluhelu ka papa hash i ke code hash no 78, ʻo ia ka 8.
- Nānā ka papa hash i ka māhele 8, a ʻo ka mea mua i loaʻa iā ia he 78.
- Hoʻihoʻi ʻo ia iā ʻoe i ka helu 78
- He 2 hana wale no ka huli ana (hoʻokahi e helu i ka waiwai hash a ʻo kekahi e nānā i ka mea i loko o ka māhele).
I kēia manawa e ʻōlelo mākou makemake ʻoe e kiʻi i ka element 59:
- Heluhelu ka papa hash i ke code hash no 59, ʻo ia ka 9.
- Huli ka papaʻaina hash ma ka māhele 9, ʻo ka mea mua i loaʻa ʻo 99. Mai ka 99!=59, ʻaʻole he mea kūpono ka element 99.
- Ma ka hoʻohana ʻana i ka lokahi like, lawe ʻia ka mea ʻelua (9), ke kolu (79), ..., ka hope (29).
- ʻAʻole i ʻike ʻia ka mea.
- ʻO ka huli ʻana he 7 mau hana.
ʻO ka hana hash maikaʻi
E like me kāu e ʻike ai, ma muli o ka waiwai āu e ʻimi nei, ʻaʻole like ke kumukūʻai!
Inā hoʻololi au i ka hana hash modulo 1 o ke kī (ʻo ia hoʻi, e lawe ana i nā huahelu 000 hope loa), ʻo ka lua o ka huli ʻana he 000 hana wale nō no ka mea ʻaʻohe mea i ka māhele 6. ʻO ka paʻakikī maoli ka loaʻa ʻana o kahi hana hash maikaʻi e hana i nā bākeke i loaʻa kahi helu liʻiliʻi o nā mea.
I kaʻu laʻana, maʻalahi ka loaʻa ʻana o kahi hana hash maikaʻi. Akā he laʻana maʻalahi kēia, ʻoi aku ka paʻakikī o ka loaʻa ʻana o kahi hana hash maikaʻi inā ʻo ke kī:
- string (no ka laʻana - inoa hope)
- 2 laina (no ka laʻana - inoa hope a me ka inoa mua)
- 2 laina a me ka lā (no ka laʻana - inoa hope, inoa mua a me ka lā hānau)
- ...
Me ka hana hash maikaʻi, ke kumu kūʻai o ka nānā ʻana i ka papaʻaina hash O(1).
ʻO ka papaʻaina ʻo Array vs hash
No ke aha e hoʻohana ʻole ai i kahi array?
Hmm, nīnau maikaʻi.
- Hiki i ka papa hash hoʻouka hapa i loko o ka hoʻomanaʻo, a hiki i nā ʻāpana i koe ke noho ma ka disk.
- Me kahi array pono ʻoe e hoʻohana i nā wahi pili i ka hoʻomanaʻo. Inā ʻoe e hoʻouka ana i kahi pākaukau nui he mea paʻakikī loa ka loaʻa ʻana o kahi ākea hoʻomau.
- No ka papaʻaina hash, hiki iā ʻoe ke koho i ke kī āu e makemake ai (no ka laʻana, ka ʻāina a me ka inoa hope o ke kanaka).
No ka ʻike hou aku, hiki iā ʻoe ke heluhelu i ka ʻatikala e pili ana
Source: www.habr.com