在A *(路径查找)算法中,为什么h()必须*å¯ä»¥æŽ¥å—*?

时间:2016-01-20 23:30:48

标签: algorithm

æ ¹æ®the Wikipedia article on the A* search algorithm说:

  

这里,g(n)是从åˆå§‹èŠ‚点到n的已知æˆæœ¬;   该值由算法跟踪。 h(n)是å¯å‘å¼ä¼°è®¡   从n到任何目标节点的æˆæœ¬ã€‚为了找到算法   实际的最短路径,å¯å‘函数必须是å¯æŽ¥å—的,   这æ„味ç€å®ƒæ°¸è¿œä¸ä¼šè¿‡é«˜ä¼°è®¡åˆ°è¾¾çš„实际æˆæœ¬   最近的目标节点。å¯å‘å¼å‡½æ•°æ˜¯ç‰¹å®šäºŽé—®é¢˜çš„,必须   由算法的用户æ供。

它明确指出 h()函数ä¸å¾—高估è·ç¦»ã€‚然而,在我看æ¥ï¼Œåœ¨æˆ‘的代ç ä¸­ï¼Œå¦‚果我的å¯å‘å¼ h()函数返回无穷大(或零),它的执行效果也一样,ä»ç„¶å¯ä»¥æ‰¾åˆ°æœ€çŸ­çš„路径。

那为什么è¦å¯ä»¥æŽ¥å—?是ä¸æ˜¯æ— é™é«˜ä¼°äº†æˆ‘çš„å¯å‘å¼ï¼Ÿæˆ‘觉得我的节点图很å¤æ‚。是å¦æœ‰ç‰¹å®šçš„情况,这å¯èƒ½ä¼šäº§ç”Ÿå½±å“,我å¯èƒ½æ²¡æœ‰åœ¨æˆ‘的图表中å†çŽ°ï¼Ÿ

附录: 请å‚阅this fiddle并éšæ„在第221行弄乱h功能。点击布局图移动红点。

以下任何注释行对h()函数åŒæ ·æœ‰æ•ˆã€‚

var h = function(a,b) {
    //return calcDistance(a,b);
    //return 0;
    return 999999;
}

1 个答案:

答案 0 :(得分:1)

如果您的å¯å‘å¼ä¸å¯æŽ¥å—,那么您有时会“满足于低于最佳状æ€ã€‚â€

å‡è®¾æ‚¨çš„æœç´¢åˆšåˆšåˆ°è¾¾ç›®æ ‡èŠ‚点。你å¯ä»¥åœä¸‹æ¥å—?或者还有没有找到更好的目标之路?

如果å¯å‘å¼æ€»æ˜¯ä½Žä¼°ä»Žä»»ä½•èŠ‚点到目标的最短路径,您å¯ä»¥æŸ¥çœ‹æ¯ä¸ªè¾¹ç•ŒèŠ‚点N并比较(获得Nçš„æˆæœ¬ï¼‰+(Nçš„å¯å‘å¼ï¼‰åˆ°ï¼ˆé€šè¿‡æˆ‘已找到的路径到达目标的æˆæœ¬ã€‚如果没有任何节点Nä»ç„¶å¯ä»¥æ‰¾åˆ°æ›´çŸ­çš„目标路径,那么你已ç»å®Œæˆäº†ã€‚

如果您的å¯å‘å¼ä¸å¯æŽ¥å—,则此推ç†ä¸èµ·ä½œç”¨ã€‚