【问题标题】:Find if a value exists in the 2D array using Binary search.If possible trace 43 in matrix table.使用二进制搜索查找二维数组中是否存在值。如果可能,请在矩阵表中跟踪 43。
【发布时间】:2018-03-20 05:26:18
【问题描述】:

image

矩阵的形式是

10 | 13 | 43 | 61 | 67 | 83      
14 | 24 | 47 | 71 | 3  | 94  
22 | 33 | 51 |82  | 88 | 96  
27 | 41 | 52 | 84 | 92 | 99  
38 | 45 | 52 | 90 | 95 | 101  
105|111 |121 |133 |144 |149  

找到 43,60,144

给定一个二维数组,其数值按行按 4 列按列排序。使用二进制搜索查找数组中是否存在值。

我已经通过图像中的二进制搜索对其进行了跟踪。 第一次尝试: 我通过首先找到中点(51)来追踪它。找到第一个中点后,我将矩阵分为两部分。第一部分是上半部分(对角线 10-51),第二部分是剩余部分。我可以这样划分矩阵吗(第一次尝试)?

第二次尝试:我又取了一个中点(51),分为上下半部分。上半部分和下半部分用对角线数字取。

我无法找到给定的值。 还有其他条件可以找到数字:43,60,144 吗?

二维数组:

 int no[6][6]={{10,13,43,61,67,83},
  {14,24,47,71,73,94},  
  {22,33,51,82,88,96}, 
  {27,41,52,84,92,99},
  {38,45,60,90,95,101},
  {105,111,121,133,144,149}
  };

【问题讨论】:

标签: php algorithm search matrix binary


【解决方案1】:

我建议先查看线性算法。它很简单并且具有O(n+m) 的复杂性。让我们一步一步模拟它。我们从左下角开始。那么如果查询数小于当前位置的数我们就上移,否则如果大就右移。

10  13  43  61  67  83
14  24  47  71  73  94  
22  33  51  82  88  96 
27  41  52  84  92  99
38  45  60  90  95  101
105 111 121 133 144 149 

我们从左下角开始。
43 < 105,因此该行中的所有数字都将大于43。提升。

10  13  43  61  67  83
14  24  47  71  73  94  
22  33  51  82  88  96 
27  41  52  84  92  99
38  45  60  90  95  101

43 > 38,因此该列中的所有数字都将小于43。向右移。

13  43  61  67  83
24  47  71  73  94  
33  51  82  88  96 
41  52  84  92  99
45  60  90  95  101

43 < 45。向上移动。

13  43  61  67  83
24  47  71  73  94  
33  51  82  88  96 
41  52  84  92  99

43 > 41。向右移动。

43  61  67  83
47  71  73  94  
51  82  88  96 
52  84  92  99

43 < 52。向上移动。

43  61  67  83
47  71  73  94  
51  82  88  96 

43 < 51。向上移动。

43  61  67  83
47  71  73  94  

43 < 47。向上移动。

43  61  67  83

43 = 43。答对了!

【讨论】:

  • 先生,您追踪得很好。
  • 不,不要删除它的罚款。它会对其他人有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2014-01-08
相关资源
最近更新 更多