爬山算法java代码 爬山算法应用

爬山算法爬山算法是一种局部择优的方法 , 是一种局部贪心的最优算法 。
采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策 。该算法每次从当前解的临近解空间中选择一个最优解作为当前解 , 
直到达到一个局部最优解,属于人工智能算法的一种 。
实现简单,其主要缺点是会陷入局部最优解,不一定能搜索到全局最优解 。
如下图所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,
因为在A点无论向那个方向小幅度移动都不能得到更优的解 。
如果想进一步了解爬山算法及其应用,请参考:
基于爬山算法求解TSP问题(JAVA实现)
机器学习优化算法之爬山算法小结
java面试题:一个人早上八点上山 , 晚上八点到达山顶 。第二天早上八点下山,晚上八点到达山底 。java面试题爬山算法java代码的解析方式(思路如下):
public static void main(String[] args) {
// TODO Auto-generated method stub
int up = 8;
int down = 8;
while(up=20){
if((up == 20-6) (up == 20-6)){
System.out.println("在"+up+"时到达同一地点");
break;
}
up += 1;
down += 1;
}
}
微软面试题的背后
微软的奇葩面试题答案并不重要 , 重要的是思考过程,而思考过程体现了爬山算法java代码你是否拥有公司所看重的能力 , 不仅是微软,其爬山算法java代码他公司的面试也是为了测试爬山算法java代码你的某种能力,如果爬山算法java代码你提前培养了这种能力,相当于知道了面试的“考纲”,在面试中自然就从容不迫 , 游刃有余了 。
平时要知道转化能力是看透问题,然后找到解决方案的能力 。所以转化能力最重要的是如何看透问题,也就是你思考问题的方式 。
什么是爬山算法我在百度上找的!~~
简介
爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策 。属于人工智能算法的一种 。
算法:
function HILL-CLIMBING(problem) returns a state that is a local maximum
inputs: problem, a problem
local variables: current, a node
【爬山算法java代码 爬山算法应用】neighbor, a node
current - MAKE-NODE(INITIAL-STATE[problem])
loop do
neighbor - a highest-valued successor of current
if VALUE[neighbor]= VALUE[current] then return STATE[current]
current - neighbor
算法解释:
从当前的节点开始,和周围的邻居节点的值进行比较 。如果当前节点是最大的,那么返回当前节点 , 作为最大值(既山峰最高点);反之就用最高的邻居节点来,替换当前节点 , 从而实现向山峰的高处攀爬的目的 。如此循环直到达到最高点 。
算法优缺点
优点
避免遍历,通过启发选择部分节点,从而达到提高效率的目的 。
缺点
因为不是全面搜索,所以结果可能不是最佳 。
爬山算法一般存在以下问题:
1)、局部最大:某个节点比周围任何一个邻居都高 , 但是它却不是整个问题的最高点 。
2)、高地:也称为平顶,搜索一旦到达高地 , 就无法确定搜索最佳方向,会产生随机走动 , 使得搜索效率降低 。
3)、山脊:搜索可能会在山脊的两面来回震荡,前进步伐很小 。
其他相关算法
stochastic hill climbing
First-choice hill climbing
Ramdom-restart hill climbing
Simulated annealing search

推荐阅读