简单的查找算法

本文深入探讨了两种基本的算法概念:顺序查找和回溯。首先,介绍了顺序查找的基本原理,通过遍历数组来定位目标元素。其次,详细阐述了回溯算法的原理,包括定义解空间、确定搜索结构和使用深度优先搜索策略。并通过经典的8皇后问题展示了如何应用回溯算法求解复杂问题。
摘要由CSDN通过智能技术生成

1、顺序查找:
遍历数组,对比每一个元素,找到目标元素 返回元素所在的位置 ,否者返回-1;(废话不多 看代码)

/**
* 顺序查找算法
* 找到 返回所在的索引
* 找不到 返回-1
* @param a [] 数组
* @param key 目标元素
* @return 索引 or -1
/
public static int sequentialLookup(int[] a, int key ) {
for(int i=0;i<a.length-1;i++) {
if(key==a[i]) {
System.out.println(key+“所在的位置:”+i);
return i;
}
}
System.out.println(“查无此元素”);
return -1;
}
2、 回溯:(通用解题法)
//闷头向前冲 撞墙后退一步,换个方向再冲,直到找到想要的结果或者答案为止。
这是一种优搜索的方法, 按选优条件向前搜索,如果到达某一步 方法不够优或者不够好,那就退后一步,重新选择。 满足回溯条件的点叫做 回溯点。
(1)、针对问题 定义问题的解空间。
(2)、 确定易于搜索的空间结构,使得能用回溯方法方便的搜索整个空间。
(3)、深度优先的方式搜索空间,并在搜索过程中用剪枝函数避免无效的搜索。
例 经典的8 皇后问题:
在8
8的棋盘上放 8 个棋子,使其两两互相不在同一行同一列,也不在对角线上,这里就用了穷举的思想。当然 ,如果让人来想这个问题,那麻烦的狠,但是计算机不会累的。
package com.neuedu.toflashback;

/**

  • 八皇后问题 利用回溯算法解决
  • @author 秋风

*/

public class ToFlashBack {

int[] x;// 当前的解
int N;// 皇后的个数
int sum = 0;// 当前已经找到的可行方案数

public int Queens(int n) {
	N = n;
	x = new int[N + 1];
	back(1);
	return sum;
}

/**
 * 判断这一点位置是否合理 ,能否放棋子
 * 
 * @param col
 * @return true/false
 */
private boolean place(int col) {
	for (int i = 1; i < col; i++) {
		if (Math.abs(col - i) == Math.abs(x[col] - x[i]) || x[col] == x[i]) {
			//  判断该格子 的这一行 以及这一列  和 对角线上  有没有 棋子
			return false;
		}
	}
	return true;
}

private void back(int t) {
	if (t > N) {
		sum++;
	} else {
		for (int j = 1; j <= N; j++) {
			x[t] = j;
			if (place(t)) {
				back(t + 1);// 递归
			}
		}
	}
}

public static void main(String[] args) {
	ToFlashBack tfb = new ToFlashBack();
	System.out.println( "一共有"+tfb.Queens(8)+"放置方法");
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值