一,搜索算法介绍
搜索是在常规业务应用程序中执行的最常见操作之一。这涉及读取存储在数据结构中的一些数据喜欢Arrays
,List
,Map
等。更通常情况下,该搜索操作确定用于最终用户的应用程序的响应。
(ps:让我们看一下百度百科专业的解释)
搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。现阶段一般有枚举算法、深度优先搜索、广度优先搜索、A*算法、回溯算法、蒙特卡洛树搜索、散列函数等算法。在大规模实验环境中,通常通过在搜索前,根据条件降低搜索规模;根据问题的约束条件进行剪枝;利用搜索过程中的中间解,避免重复计算这几种方法进行优化。
文中线性算法分为四部分:一,算法介绍,二,实现思路,三,代码实现,四,以算法时间复杂度和空间复杂度总结算法。
二,线性搜索算法实现
线性搜索说明:线性搜索顾名思义就是从头找到尾,这是很简单的搜索算法也是很蛮力算法。这种算法效率低下但线性搜索对于基础数据结构的状态没有任何先决条件。
线性实现思路:线性搜索包括在给定数据结构中顺序搜索元素,直到找到该元素或到达结构的末尾。如果找到了元素,我们通常只返回它在数据结构中的位置。如果没有,我们通常会返回-1。
代码实现:
public class SearchAlgorithms {
/**
* 线性搜索
* @param arr
* @param targetParameter
* @return
*/
public static int linearSearch(int arr[], int targetParameter ) {
for (int index = 0; index < arr.length; index++) {
if (arr[index] == targetParameter)
return index;
}
return -1;
}
/**
* 用于打印结果
* @param targetParameter
* @param index
*/
public static void print(int targetParameter, int index) {
if (index == -1){
System.out.println(targetParameter + " 未找到");
}
else {
System.out.println(targetParameter + " 线性搜索结果为: " + index);
}
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
//为便于测试定义的数组
int index = linearSearch(new int[]{89, 57, 91, 47, 95, 3, 27, 22, 67, 99}, 67);
print(67, index);//搜索67
}
}
打印结果
线性搜索总结:
遍历整个元素集以获得要搜索的元素的位置。对于此算法,最坏的情况是我们要搜索的元素是数组中的最后一个元素。
在这种情况下,我们将N
在找到元素之前迭代时间。
因此,线性搜索的时间复杂度为O(N)。
这种类型的搜索仅需要一个内存单元即可存储要搜索的元素。这与输入数组的大小无关。
因此,线性搜索的空间复杂度为O(1)。
线性搜索可用于搜索少量且未排序的数据集,以确保不会增加太多大小。这是一种基础的搜索算法,由于其时间复杂度呈线性增加所以使用人群不是很多,传统企业一般不用。