正确解看此链接
http://www.cnblogs.com/sunyongyue/archive/2010/12/04/1896675.html
这个条件粗看起来不是很靠谱,事实上却很好用
代码实现如下,
import java.util.Arrays;
public class AiEqualsISearcher {
private static int ARR_LENGTH = 100;
private int[] numArr = new int[ARR_LENGTH];
private int stepCount = 0;
private void init() {
int targetElement = (int) (Math.random() * (ARR_LENGTH - 1));
numArr[targetElement] = targetElement;
int num = targetElement - 1;
while (num >= 0) {
int tmp = (int) (Math.random() * 3);
numArr[num] = numArr[num + 1] - tmp;
if (numArr[num] == num) {
numArr[num] = num - 1;
}
num--;
}
for (int i = targetElement + 1; i < ARR_LENGTH; i++) {
int tmp = (int) (Math.random() * 5);
numArr[i] = numArr[i - 1] + tmp;
if (numArr[i] == i) {
numArr[i] = i + 1;
}
}
System.out.println("the num arr init as " + Arrays.toString(numArr));
System.out.println("the target index is " + targetElement);
}
private int search(int start, int end) {
System.out.println("check a[" + start + "," + end + "]");
stepCount++;
int middle = (start + end) / 2;
if (numArr[middle] == middle) {
return middle;
}
if (start >= end) {
return -1;
}
if (end >= numArr[middle]) { // && numArr[end] >= middle
int result = search(middle + 1, end);
if (result != -1) {
return result;
} else {
return search(start, middle - 1);
}
} else {
System.out
.println("a[" + middle + "," + end + "] no need to check");
return search(start, middle - 1);
}
}
public static void main(String[] args) {
AiEqualsISearcher searchAi = new AiEqualsISearcher();
searchAi.init();
System.out.println("\nstart to search...");
int i = searchAi.search(0, AiEqualsISearcher.ARR_LENGTH - 1);
if (i >= 0) {
System.out.println("find a[" + i + "]=" + i + " with "
+ searchAi.stepCount + " steps ");
} else {
System.out.println("can't find the element");
}
}
}
分享到:
相关推荐
- **目标**:深入学习遗传算法、分子对接及隐马尔可夫模型(HMM)等高级算法,并探讨其在生物信息学领域的具体应用。 - **主要内容**: - 遗传算法的不同变体及其在生物和化学领域的应用案例。 - 分子对接技术,包括...
### 数据结构教程之算法分析——排序算法详解 #### 一、引言 在《北京大学数据结构教程算法分析》这本书中,作者们详细介绍了多种排序算法,并深入探讨了它们的实现原理、性能分析以及应用场景。排序是计算机科学中...
在IT领域,排序算法是数据结构与算法中的基础且重要的一部分。它们被广泛应用于各种软件开发,例如数据库管理系统、搜索引擎优化、数据分析等。下面将详细解释标题和描述中提到的几种排序算法,以及它们的工作原理和...
贪心算法是解决问题的一种策略,它在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的。例如在P1016题中,旅行家的预算问题就是通过贪心策略来解决的,总是选择...
- **基数排序**:非比较排序算法之一。 #### 总结 严蔚敏版的数据结构学习方法为学生提供了全面而深入的学习资源。通过系统地学习这些知识点,不仅可以掌握数据结构的基本理论,还能学会如何在实际问题中应用它们...
排序算法是用于重新组织数据序列,使其按照特定标准(如升序或降序)排列的算法。这里我们将深入探讨标题和描述中提及的一些主要排序算法:交换排序、选择排序、桶排序、归并排序、快速排序以及二分法排序。 1. **...
通过对数组乘法算法的优化、利用傅立叶变换及其变体、扩展基本运算功能以及对内存使用的优化,使得大数计算器能够在处理极为庞大的数值时依然保持高效稳定。此外,通过严谨的异常处理机制,确保了计算结果的准确性。...
综上所述,这个压缩包包含了一系列用于解决单变量优化问题的算法,如线性搜索、三次插值、动态区间搜索、斐波那契搜索、二次插值、黄金分割搜索、二分法以及Himmelman算法的变体。这些算法在寻找函数的最小值或最大...
在这个压缩包中,"CS实验参考题目(包括背包问题)" 提供了五个实验课题,涉及了二分法和背包问题这两个重要的算法主题。下面将详细阐述这两个领域的知识。 **一、二分法** 二分法,又称折半查找,是一种在有序...
接着,"二分法"是一种查找算法,常用于求解方程根或者在有序序列中查找特定值。它将问题区间不断减半,每次检查中间值,根据比较结果排除掉一半的可能范围,直到找到目标值或者确定不存在目标值为止。这种方法在处理...
《数值分析算法开源实现》 在信息技术领域,数值分析算法是解决复杂数学问题的重要工具,它们在物理、工程、金融等多个领域都有广泛应用。本项目"Numerik-Analiz-Algoritmalari-开源"是一个开放源代码的实现,旨在...
- 介绍了一种算法问题,即如何找到数组中具有最大和的连续子序列。 **2.7 断言** - 断言是一种编程工具,用于在开发过程中检查假设是否成立。这里会介绍assert宏的用法及其在调试中的应用。 **2.8 O表示法** - ...