diff --git a/Code/search.h b/Code/search.h new file mode 100644 index 0000000..82c019f --- /dev/null +++ b/Code/search.h @@ -0,0 +1,13 @@ +#include +#include +#include "head.h" + +// ·Ö¿é²éÕÒ +// ·Ö¿éË÷Òý±í +typedef struct { + // ¿éÖÐ×î´óÔªËØ + element_type max; + // ´æ´¢Çø¼äµÄ×îµÍË÷ÒýºÍ×î¸ßË÷Òý + int low, high; +} BlockSearchIndex; + diff --git a/Data-Structrue/search.md b/Data-Structrue/search.md index 8b44410..c3e4515 100644 --- a/Data-Structrue/search.md +++ b/Data-Structrue/search.md @@ -10,7 +10,7 @@ + 查找长度:查找è¿ç®—中,需è¦å¯¹æ¯”关键字的次数。 + 平凿Ÿ¥æ‰¾é•¿åº¦ASL:所有查找过程中进行关键字比较次数的平å‡å€¼ã€‚$ASL=\sum_{i=1}^nP_iC_i$。其中$P_i$表示查找第i个元素的概率,$C_i$表示查找第i个元素的查找长度。 -## 陿€æŸ¥æ‰¾ +## 线性表查找 ### é¡ºåºæŸ¥æ‰¾ @@ -34,10 +34,14 @@ ASL查找失败为$\dfrac{1+2+3+\cdots+n+n}{n+1}=\dfrac{n}{2}+\dfrac{n}{n+1}$。 ### æŠ˜åŠæŸ¥æ‰¾ -也称为二分查找,åªé€‚用于有åºçš„顺åºè¡¨ï¼Œé“¾è¡¨æ— æ³•适用。 +也称为二分查找,åªé€‚用于有åºçš„顺åºè¡¨ï¼Œé“¾è¡¨æ— æ³•é€‚ç”¨ï¼Œå› ä¸ºé“¾è¡¨å¾ˆéš¾æŠ˜åŠæ‰¾åˆ°å…ƒç´ ã€‚ + +#### æŠ˜åŠæŸ¥æ‰¾çš„结构 定义三个指针,lowæŒ‡å‘æŸ¥æ‰¾èŒƒå›´çš„æœ€å°å€¼ï¼ŒhighæŒ‡å‘æŸ¥æ‰¾èŒƒå›´çš„æœ€å¤§å€¼ï¼ŒmidæŒ‡å‘æŸ¥æ‰¾èŒƒå›´çš„中间值,$mid=\lfloor(low+high)/2\rfloor$。(也å¯ä»¥å‘ä¸Šå–æ•´ï¼Œè¿‡ç¨‹ä¼šæœ‰æ‰€ä¸åŒï¼‰ +#### æŠ˜åŠæŸ¥æ‰¾çš„过程 + 查找时,首先计算出mid判断是å¦ç›¸ç­‰ï¼Œè‹¥æŸ¥æ‰¾å€¼å°äºŽmid的值,则将high赋值为mid的值,若查找值大于mid,则将low赋值为midçš„å€¼ï¼Œé‡æ–°è®¡ç®—mid。这样就å¯ä»¥ä¸æ–­äºŒåˆ†åŒºé—´æ¥æŸ¥æ‰¾ï¼Œä»Žè€ŒåŠ å¿«è¿­ä»£ã€‚å½“æŸ¥æ‰¾æœ€åŽlow>high则查找失败。 ASL查找æˆåŠŸä¸º$\dfrac{1+2+3+\cdots+n}{n}=\dfrac{n+1}{2}$,ASL查找失败为$n+1$ï¼Œæ—¶é—´å¤æ‚度为$O(n)$。 @@ -54,4 +58,135 @@ ASL查找æˆåŠŸä¸º$\dfrac{1+2+3+\cdots+n}{n}=\dfrac{n+1}{2}$,ASL查找失败 ASL查找æˆåŠŸæŸ¥æ‰¾å¤±è´¥éƒ½ä¸€å®šå°äºŽæŠ˜åŠæŸ¥æ‰¾æ ‘çš„æ ‘é«˜ï¼Œæ—¶é—´å¤æ‚度为$O(\log_2n)$。 -## åŠ¨æ€æŸ¥æ‰¾ +### åˆ†å—æŸ¥æ‰¾ + +åˆ†å—æŸ¥æ‰¾åˆç§°ä¸ºç´¢å¼•é¡ºåºæŸ¥æ‰¾ï¼Œéœ€è¦å¯¹æ•°æ®è¿›è¡Œä¸€å®šçš„æŽ’åºï¼Œä¸ä¸€å®šå…¨éƒ¨æ˜¯é¡ºåºçš„ï¼Œä½†æ˜¯è¦æ±‚在一个区间内是满足一定æ¡ä»¶çš„,å³å—内无åºï¼Œå—间有åºã€‚å…¶ä¸­åˆ†å‰²çš„å—æ•°å’Œæ¯å—里的数æ®ä¸ªæ•°éƒ½æ˜¯ä¸å®šçš„。 + +#### åˆ†å—æŸ¥æ‰¾çš„结构 + +除了ä¿å­˜æ•°æ®çš„顺åºè¡¨å¤–还需è¦å®šä¹‰ä¸€ä¸ªç´¢å¼•表,ä¿å­˜æ¯ä¸ªåˆ†å—çš„**最大关键字**å’Œæ¯å—的存储空间。 + +很明显这ç§å®šä¹‰æ–¹å¼å®šä¹‰äº†ä¸¤ä¸ªé¡ºåºç»“构,并且如果æ’入删除时需è¦å¤§é‡ç§»åŠ¨å…ƒç´ ï¼Œæ‰€ä»¥å¯ä»¥é‡‡ç”¨é“¾è¡¨çš„å½¢å¼ã€‚ + +å®šä¹‰ä¸€ç§æœ€å¤§å…ƒç´ ç»“ç‚¹ï¼ŒåŒ…å«æ•°æ®ã€æŒ‡å‘åŽç»§æœ€å¤§å…ƒç´ ç»“ç‚¹çš„æŒ‡é’ˆã€æŒ‡å‘分å—内元素的指针;定义一ç§å—å†…å…ƒç´ ç»“ç‚¹ï¼ŒåŒ…å«æ•°æ®ã€æŒ‡å‘åŽç»§åˆ†å—å†…å…ƒç´ çš„æŒ‡é’ˆã€‚ä½†æ˜¯è¿™æ—¶å€™å°±æ— æ³•æŠ˜åŠæŸ¥æ‰¾ï¼Œåªèƒ½é¡ºåºæŸ¥æ‰¾ã€‚ + +所以总的æ¥è¯´åˆ†å—查找还是一ç§é™æ€æŸ¥æ‰¾ï¼ŒåŠ¨æ€æ’入删除的效率较低。 + +#### åˆ†å—æŸ¥æ‰¾çš„过程 + +在查找时先根æ®å…³é”®å­—éåŽ†ç´¢å¼•è¡¨ï¼Œç„¶åŽæ‰¾åˆ°ç´¢å¼•表的分å—(å¯ä»¥é¡ºåºä¹Ÿå¯ä»¥æŠ˜åŠï¼‰ï¼Œå†åˆ°å­˜å‚¨æ•°æ®çš„顺åºè¡¨çš„索引区间中查找。 + +è‹¥é€‚ç”¨æŠ˜åŠæŸ¥æ‰¾æŸ¥æ‰¾ç´¢å¼•表的分å—,索引表中若ä¸å­˜åœ¨ç›®æ ‡å…³é”®å­—ï¼Œåˆ™æŠ˜åŠæŸ¥æ‰¾ç´¢å¼•表最终会åœåœ¨low>high,è¦åœ¨low所指å‘分å—中查找。 + +#### åˆ†å—æŸ¥æ‰¾çš„æ•ˆçއ + +ASL查找æˆåŠŸå¤±è´¥çš„æƒ…å†µéƒ½ååˆ†å¤æ‚,所以一般ä¸ä¼šè€ƒã€‚ + +å‡è®¾é•¿åº¦ä¸º$n$的查找表被å‡åŒ€åˆ†ä¸º$b$å—,æ¯å—$s$个元素,å‡è®¾ç´¢å¼•查找和å—å†…æŸ¥æ‰¾çš„å¹³å‡æŸ¥æ‰¾é•¿åº¦ASL分别为$L_I$å’Œ$L_S$ï¼Œåˆ™åˆ†å—æŸ¥æ‰¾çš„平凿Ÿ¥æ‰¾é•¿åº¦ä¸º$ASL=L_I+L_S$。 + +ä½¿ç”¨é¡ºåºæŸ¥æ‰¾ç´¢å¼•表,则$L_I=\dfrac{(1+2+\cdots+b)}{b}=\dfrac{b+1}{2}$,$L_S=\dfrac{(1+2+\cdots+s)}{s}=\dfrac{s+1}{2}$。所以$ASL=\dfrac{b+1}{2}+\dfrac{s+1}{2}=\dfrac{s^2+2s+n}{2s}$,当$s=\sqrt{n}$时,$ASL_{min}=\sqrt{n}+1$。 + +ä½¿ç”¨æŠ˜åŠæŸ¥æ‰¾ç´¢å¼•表,则$L_I=\lceil\log_2(b+1)\rceil$,$L_S=\dfrac{(1+2+\cdots+s)}{s}=\dfrac{s+1}{2}$。所以$ASL=\lceil\log_2(b+1)\rceil+\dfrac{s+1}{2}$。 + +## 数表查找 + +### Bæ ‘ + +#### B树的定义 + +为了ä¿è¯m剿Ÿ¥æ‰¾æ ‘中æ¯ä¸ªç»“点都能被有效利用,é¿å…大é‡ç»“点浪费导致树高过大,所以规定m剿Ÿ¥æ‰¾æ ‘中,除了根结点以外,任何结点至少有$\lceil m/2\rceil$个分å‰ï¼Œå³è‡³å°‘包å«$\lceil m/2\rceil-1$个结点。 + +为了ä¿è¯m剿Ÿ¥æ‰¾æ ‘是一棵平衡树,é¿å…æ ‘åé‡å¯¼è‡´æ ‘高过大,所以规定m剿Ÿ¥æ‰¾æ ‘ä¸­ä»»ä½•ä¸€ä¸ªç»“ç‚¹ï¼Œå…¶æ‰€æœ‰å­æ ‘的高度都è¦ç›¸åŒã€‚ + +而能ä¿è¯è¿™ä¸¤ç‚¹çš„æŸ¥æ‰¾æ ‘,就是一棵B树,多少å‰ï¼Œå°±æ˜¯ä¸€æ£µå¤šå°‘阶的B树。 + +Bæ ‘å³å¤šè·¯å¹³è¡¡æŸ¥æ‰¾æ ‘,所有结点的孩å­ä¸ªæ•°çš„æœ€å¤§å€¼å°±æ˜¯B树的阶,一般用m表示。 + +#### B树的性质 + ++ æ ‘çš„æ¯ä¸ªç»“点至多包å«mæ£µå­æ ‘,至多包å«m-1个关键字。 ++ B树最底端的失败的ä¸å­˜åœ¨çš„结点就是常说的å¶å­ç»“点,而最底端的存在数æ®çš„结点就是终端结点。(一般的树的å¶å­ç»“点和终端结点都是指最底端的有数æ®çš„结点) ++ è‹¥æ ¹ç»“ç‚¹ä¸æ˜¯ç»ˆç«¯ç»“ç‚¹ï¼Œåˆ™è‡³å°‘æœ‰ä¸¤é¢—å­æ ‘,任æ„ç»“ç‚¹çš„æ¯æ£µå­æ ‘都是ç»å¯¹å¹³è¡¡çš„。 ++ 除根结点以外的所有éžå¶ç»“点至少有$\lceil m/2\rceil$æ£µå­æ ‘,å³è‡³å°‘包å«$\lceil m/2\rceil-1$个结点。 ++ 所有å¶ç»“点都出现在åŒä¸€ä¸ªå±‚次上且ä¸å¸¦ä¿¡æ¯ã€‚ ++ æ¯ä¸ªç»“点中的关键字是有åºçš„ã€‚å­æ ‘0 < 关键字1 < å­æ ‘2 < ...。 + +计算B树高度大部分ä¸åŒ…括å¶å­ç»“ç‚¹ã€‚è‹¥å«æœ‰n个关键字的m阶B树。 + ++ 最å°é«˜åº¦ï¼šè®©æ¯ä¸ªç»“点尽å¯èƒ½æ»¡ï¼Œæœ‰$m-1$个关键字,$m$个分å‰ï¼Œåˆ™ä¸€å…±æœ‰$(m-1)(m^0+m^1+m^2+\cdots+m^{h-1})$个结点,其中$n$å°äºŽç­‰äºŽè¿™ä¸ªå€¼ï¼Œä»Žè€Œæ±‚出$h\geqslant\log_m(n+1)$。 ++ 最大高度: + + 让å„层分å‰å°½å¯èƒ½å°‘ï¼Œå³æ ¹ç»“ç‚¹åªæœ‰ä¸¤ä¸ªåˆ†å‰ï¼Œå…¶ä»–ç»“ç‚¹åªæœ‰$\lceil m/2\rceil$个分å‰ï¼Œæ‰€ä»¥ç¬¬ä¸€å±‚1个,第二层2个,第$h$层$2(\lceil m/2\rceil)^{h-2}$个结点,而$h+1$层的å¶å­ç»“点有$2(\lceil m/2\rceil)^{h-1}$个,且$n$个关键字的B树必然有$n+1$个å¶å­ç»“点,从而$n+1\geqslant2(\lceil m/2\rceil)^{h-1}$,å³$h\leqslant\log_{\lceil m/2\rceil}\dfrac{n+1}{2}+1$。 + + 让å„层关键字尽å¯èƒ½å°‘,记$k=\lceil m/2\rceil$。第一层最少结点数和最少关键字为1;第二层最少结点数为2,最少关键字为$2(k-1)$,第三层最少结点数为$2k$,最少关键字为$2k(k-1)$,第$h$层最少结点数为$2k^{h-2}$,最少关键字为$2k^{h-2}(k-1)$,从而$h$层的m阶B数至少包å«å…³é”®å­—总数$1+2(k-1)(k^0+k^1+\cdots+k^{h-2})=1+2(k^{h-1}-1)$,若关键字总数å°äºŽè¿™ä¸ªå€¼ï¼Œåˆ™é«˜åº¦ä¸€å®šå°äºŽ$h$,所以$n\geqslant 1+2(k^{h-1}-1)$,则$h\leqslant\log_{\lceil m/2\rceil}\dfrac{n+1}{2}+1$。 + +#### Bæ ‘çš„æ’å…¥ + +新元素æ’入一定是æ’入到最底层的终端结点,使用B树的查找æ¥ç¡®å®šæ’å…¥ä½ç½®ã€‚ + +若导致原结点关键字数é‡è¶…è¿‡ä¸Šé™æº¢å‡ºï¼Œå°±ä»Žä¸­é—´ä½ç½®$\lceil m/2\rceil$分开,将左部分包å«çš„关键字放在原æ¥ç»“点,å³éƒ¨åˆ†åŒ…å«çš„关键字放在一个新结点,并æ’入到原结点的父结点的åŽä¸€ä¸ªä½ç½®ä¸Šï¼Œè€Œåœ¨åŽŸç»“ç‚¹çš„çˆ¶ç»“ç‚¹è¿žæŽ¥åŽçš„结点åŽç§»ä¸€ä¸ªè¿žæŽ¥è®©ä½ç»™åˆ†å‰²å‡ºæ¥çš„å³åŠéƒ¨åˆ†ç»“点,中间的一个结点$\lceil m/2\rceil$æ’入到原结点的父结点上,并考虑在父结点的顺åºã€‚ + +若父结点æ’入时也溢出了,则åŒç†åœ¨çˆ¶ç»“点的中间进行分割,左åŠéƒ¨åˆ†åœ¨åŽŸæ¥çˆ¶ç»“点;å³åŠéƒ¨åˆ†æ–°å»ºä¸€ä¸ªçˆ¶ç»“点,并把中间结点å³è¾¹å¼€å§‹çš„æ‰€æœ‰è¿žæŽ¥ç§»åŠ¨åˆ°æ–°çˆ¶ç»“ç‚¹ä¸Šï¼›ä¸­é—´çš„ç»“ç‚¹ä¸Šç§»åˆ°ç¥–çˆ¶ç»“ç‚¹ï¼Œå¦‚æžœæ²¡æœ‰å°±æ–°å»ºï¼Œç„¶åŽå»ºç«‹ä¸¤ä¸ªæŒ‡é’ˆåˆ†åˆ«æŒ‡å‘原父结点和新父结点。 + +#### B树的删除 + ++ 若被删除关键字在终端结点,且结点关键字个数ä¸ä½ŽäºŽä¸‹é™ï¼Œåˆ™ç›´æŽ¥åˆ é™¤è¯¥å…³é”®å­—,并移动åŽé¢çš„关键字。 ++ 若被删除关键字在éžç»ˆç«¯ç»“点,则用直接å‰é©±æˆ–直接åŽç»§æ¥æ›¿ä»£è¢«åˆ é™¤å…³é”®å­—,然åŽåŽé¢çš„元素直接å‰ç§»ã€‚ + + 直接å‰é©±ï¼šå½“å‰å…³é”®å­—å·¦ä¾§æŒ‡é’ˆæ‰€æŒ‡å­æ ‘最å³ä¸‹çš„元素。 + + 直接åŽç»§ï¼šå½“å‰å…³é”®å­—å³ä¾§æŒ‡é’ˆæ‰€æŒ‡å­æ ‘最左下的元素。 ++ 若被删除关键字在终端结点,但是结点关键字个数删除åŽä½ŽäºŽä¸‹é™ï¼š + + å³å…„弟够借:若原结点å³å…„弟结点里的关键字在删除一个åŽé«˜äºŽä¸‹é™ï¼Œåˆ™å¯ä»¥ç”¨ç»“点的åŽç»§ä»¥åŠåŽç»§çš„åŽç»§æ¥é¡¶æ›¿ï¼š + 1. 将原结点在父结点的连接的å‰ä¸€ä¸ªå…³é”®å­—下移到原结点并放在最åŽé¢ã€‚ + 2. 原结点父结点里的关键字全部å‰ç§»ä¸€ä½ã€‚ + 3. 将原结点å³å…„弟结点的第一个关键字上移æ’入到原结点父结点的关键字的最åŽé¢ã€‚ + 4. 原结点å³å…„弟结点里的关键字全部å‰ç§»ä¸€ä½ã€‚ + + 左兄弟够借:若原结点里å³å…„弟的关键字在删除一个åŽä½ŽäºŽä¸‹é™ï¼Œä½†æ˜¯å·¦å…„弟的结点足够,则å¯ä»¥ç”¨ç»“点的å‰é©±ä»¥åŠå‰é©±çš„å‰é©±æ¥é¡¶æ›¿ï¼š + 1. 将原结点在父结点的连接的å‰ä¸€ä¸ªå…³é”®å­—下移到原结点并放在最å‰é¢ã€‚ + 2. 原结点父结点里的关键字全部å‰ç§»ä¸€ä½ã€‚ + 3. 将原结点左兄弟结点的最åŽä¸€ä¸ªå…³é”®å­—上移æ’入到原结点父结点的关键字的最å‰é¢ã€‚ + 4. 原结点兄左弟结点里的关键字全部å‰ç§»ä¸€ä½ã€‚ + + å·¦å³å…„弟都ä¸å¤Ÿå€Ÿï¼šè‹¥ å·¦å³å…„弟结点的关键字个数å‡ç­‰äºŽä¸‹é™å€¼ï¼Œåˆ™å°†å…³é”®å­—删除åŽä¸Žå·¦æˆ–å³å…„弟结点以åŠçˆ¶ç»“点中的关键字进行åˆå¹¶ï¼š + 1. 将原结点的父结点关键字æ’入到原结点关键字åŽé¢ã€‚ + 2. 将原结点的左或å³å…„弟结点的关键字åˆå¹¶åˆ°åŽŸç»“ç‚¹ï¼ˆå‰æ’æˆ–åŽæ’),并将连接也转移到原结点上。 + 3. 若父结点的关键字个数åˆä¸æ»¡äºŽä¸‹é™ï¼Œåˆ™çˆ¶ç»“ç‚¹åŒæ ·è¦äºŽä¸Žå®ƒçš„兄弟父结点进行åˆå¹¶ï¼Œå¹¶ä¸æ–­é‡å¤è¿™ä¸ªè¿‡ç¨‹ã€‚ + +### B+æ ‘ + +B+æ ‘è€ƒçš„å¹¶ä¸æ˜¯å¾ˆæ·±ã€‚ + +ä¸Žåˆ†å—æŸ¥æ‰¾ç±»ä¼¼ï¼Œæ˜¯å¯¹B树的一ç§å˜åž‹ã€‚ + +#### B+树的定义 + +一个m阶的B+æ ‘éœ€è¦æ»¡è¶³ä»¥ä¸‹æ¡ä»¶ï¼š + +1. æ¯ä¸ªåˆ†æ”¯ç»“点最多有mæ£µå­æ ‘或孩å­ç»“点。 +2. ä¸ºäº†ä¿æŒç»å¯¹å¹³è¡¡ï¼Œéžå¶æ ¹ç»“ç‚¹è‡³å°‘æœ‰ä¸¤æ£µå­æ ‘,其他æ¯ä¸ªåˆ†æ”¯ç»“点至少有$\lceil m/2\rceil$æ£µå­æ ‘。(ä¸åŒäºŽB树,B+æ ‘åˆé‡æ–°å°†æœ€ä¸‹é¢çš„ä¿å­˜çš„æ•°æ®å®šä¹‰ä¸ºå¶å­ç»“点) +3. ç»“ç‚¹çš„å­æ ‘个数与关键字个数相等。(B树结点å­ä¸ºæ ‘个数与关键字个数加1) +4. 所有å¶ç»“ç‚¹åŒ…å«æ‰€æœ‰å…³é”®å­—ä»¥åŠæŒ‡å‘记录的指针,å¶ç»“ç‚¹ä¸­å°†å…³é”®å­—æŒ‰å¤§å°æŽ’åºï¼Œå¹¶ä¸”相邻å¶å­ç»“点按大å°é¡ºåºç›¸äº’连接起æ¥ã€‚所以B+树支æŒé¡ºåºæŸ¥æ‰¾ã€‚ +5. 所有分支结点中仅包å«å…¶å„å­ç»“ç‚¹ä¸­å…³é”®å­—çš„æœ€å¤§å€¼ä»¥åŠæŒ‡å‘å…¶å­ç»“点的指针(å³åˆ†æ”¯ç»“ç‚¹åªæ˜¯ç´¢å¼•)。 + +#### B+树的查找 + +无论查找æˆåŠŸä¸Žå¦ï¼ŒB+树的查找一定会走到最下é¢ä¸€å±‚结点,å¦åˆ™æ— æ³•确认。而B树查找å¯ä»¥åœç•™åœ¨ä»»ä½•一层。 + +B+æ ‘å¯ä»¥é历查找,å³ä»Žæ ¹ç»“点出å‘,对比æ¯ä¸ªç»“点的关键字值,若目标值å°äºŽå½“å‰å…³é”®å­—值且大于å‰ä¸€ä¸ªå…³é”®å­—值,则从当å‰å…³é”®å­—的指针å‘下查找。 + +B+æ ‘å¯ä»¥é¡ºåºæŸ¥æ‰¾ï¼Œåœ¨å¶å­ç»“点的å—之间定义指å‘åŽé¢å¶å­ç»“点å—çš„æŒ‡é’ˆï¼Œä»Žè€Œèƒ½é¡ºåºæŸ¥æ‰¾ã€‚ + +#### B+树与B树的区别 + +对于m阶B+树与B树: + + |B+æ ‘|Bæ ‘ +:--:|:--:|:--: +结点的nä¸ªå…³é”®å­—å¯¹åº”çš„å­æ ‘个数|$n$|$n+1$ +根结点的关键字数|$[1,m]$|$[1,m-1]$ +其他结点的关键字数|$[\lceil m/2\rceil,m]$|$[\lceil m/2\rceil-1,m-1]$ +关键字分布|å¶å­ç»“ç‚¹åŒ…å«æ‰€æœ‰å…³é”®å­—,éžå¶ç»“点包å«éƒ¨åˆ†é‡å¤å…³é”®å­—|所有结点的关键字ä¸é‡å¤ +结点作用|å¶å­ç»“点包å«ä¿¡æ¯ï¼Œéžå¶å­ç»“点是索引作用|所有结点都包å«ä¿¡æ¯ +结点存储内容|å¶å­ç»“点包å«å…³é”®å­—与对应记录的存储地å€ï¼Œéžå¶å­ç»“点包å«å¯¹åº”å­æ ‘的最大关键字和指å‘è¯¥å­æ ‘的指针|所有结点都包å«å…³é”®å­—ä¸Žå¯¹åº”è®°å½•å­˜å‚¨åœ°å€ +查找ä½ç½®|éœ€è¦æŸ¥æ‰¾åˆ°å¶å­ç»“点的最底层æ‰èƒ½åˆ¤æ–­æ˜¯å¦æŸ¥æ‰¾æˆåŠŸæˆ–å¤±è´¥|查找到数的任何地方都能判断 +查找速度|éžå¶å­ç»“点ä¸åŒ…å«å…³é”®å­—对应记录的存储地å€ï¼Œå¯ä»¥ä½¿ä¸€ä¸ªç£ç›˜å—嫿œ‰å¤šæ ¼å…³é”®å­—,从而让树的阶数更大,树更矮,读ç£ç›˜æ¬¡æ•°æ›´æ˜¯ï¼ŒæŸ¥æ‰¾æ›´å¿«|所有结点都包å«å­˜å‚¨åœ°å€ï¼Œä¿å­˜çš„å…³é”®å­—æ•°é‡æ›´å°‘,树高更高,所以读写ç£ç›˜æ¬¡æ•°æ›´å¤šï¼ŒæŸ¥æ‰¾æ›´æ…¢ + +## 散列表查找 + +### 散列表定义