Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 四部分二进制搜索算法_Algorithm_Search_Binary Search Tree - Fatal编程技术网

Algorithm 四部分二进制搜索算法

Algorithm 四部分二进制搜索算法,algorithm,search,binary-search-tree,Algorithm,Search,Binary Search Tree,二进制搜索将数组拆分为两部分并在其中搜索。 但我的老师要求我们找到一个解决方案,将数组分成四部分,然后分部分搜索 二进制搜索: binary_search(A, target): lo = 1, hi = size(A) while lo <= hi: mid = lo + (hi-lo)/2 if A[mid] == target: return mid else if A[mid] <

二进制搜索将数组拆分为两部分并在其中搜索。 但我的老师要求我们找到一个解决方案,将数组分成四部分,然后分部分搜索

二进制搜索:

   binary_search(A, target):
   lo = 1, hi = size(A)
   while lo <= hi:
      mid = lo + (hi-lo)/2
      if A[mid] == target:
         return mid            
      else if A[mid] < target: 
         lo = mid+1
      else:
         hi = mid-1
二进制搜索(A,目标): lo=1,hi=尺寸(A)
lo正常的二进制搜索将数组(容器)分成两部分,通常在中点:

+---+---+---+---+---+---+---+---+    
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |  
+---+---+---+---+---+---+---+---+    
              |  
              V  
+---+---+---+---+   +---+---+---+---+    
| 1 | 2 | 3 | 4 |   | 5 | 6 | 7 | 8 |  
+---+---+---+---+   +---+---+---+---+    
根据中点值,搜索键位于较低部分(左)或较高部分(右)

如果我们采用相同的概念并将其分为4部分,那么关键在于四个量子点中的一个:

+---+---+   +---+---+   +---+---+   +---+---+    
| 1 | 2 |   | 3 | 4 |   | 5 | 6 |   | 7 | 8 |  
+---+---+   +---+---+   +---+---+   +---+---+    
通过将键与最高象限插槽进行比较,可以确定键所在的象限

在二进制搜索中,通过将搜索范围除以2来找到中点

在由4部分组成的搜索中,象限是通过除以4来找到的

在编码之前,用钢笔和纸试试这个算法。当您开发有效的步骤时,请编写代码。这就是所谓的先设计后编码。一个流行的开发过程

不应该有人用勺子喂你代码自己解决。

编辑1:搜索树
数组和树与数组非常不同,您知道所有项的位置,并且可以使用索引访问元素。对于二叉树或搜索树,您需要遵循链接;因为你不知道每个元素在哪里

除以4的搜索树通常遵循B-树的原则。您有一页节点,而不是单个节点:

+---------------------------+  
| Page Details              |  
+-----+---------------------+  
| key | pointer to sub-tree |  
+-----+---------------------+  
| key | pointer to sub-tree |  
+-----+---------------------+  
| key | pointer to sub-tree |  
+-----+---------------------+  
| key | pointer to sub-tree |  
+-----+---------------------+  
页面节点是一个节点数组。大多数算法在节点数组中使用二进制搜索。找到密钥范围后,算法将遍历链接到相应的子树。该过程将重复,直到在页面节点或叶节点上找到该键为止


你的数据结构是什么?你的困惑在哪里?我很想这个问题,但我无法解决!!!首先,您需要4个变量:低、中低、中高和高。使用数学,使用数学:
(低+高)/4
。你可能想复习你的数学技能。我定义了
cursor=(低+高)/4
,但很难确定你的容器是树还是数组。这对搜索非常重要。它有实际用途吗?我现在知道一个列表拆分为两个,然后拆分为两个。但我想把数组分成树中每个部分的4个部分。您发布的代码和示例对于二进制搜索树是不正确的。在web上搜索“c++B-树”。您发布的二进制搜索算法是针对数组而不是树的。@v3ga:4除搜索将减少范围数。它应该减少在大型阵列上的搜索时间。另请参阅“斐波那契搜索”。@ThomasMatthews除以4的搜索将有一半的迭代次数,但每次迭代中的比较次数将增加一倍。它应该对渐近复杂性没有影响。