11

问题:

在英文维基百科中找到两篇文章之间的最短路径。如果存在文章 C(i) 并且文章 A 中存在指向文章 C(1) 的链接,文章 C(1) 中存在指向文章 C(2) 的链接,则文章 A 和 B 之间存在路径,.. .,在文章 C(n) 中是指向文章 B 的链接

我正在使用 Python。下载维基百科文章的网址:

  1. http://en.wikipedia.org/wiki/Nazwa_artykułu
  2. http://en.wikipedia.org/w/index.php?title?Nazwa_artykułu&printable=yes
  3. 维基百科 API

我已经编辑了我的源代码,但是当我将这些文章包含在代码中时它仍然不起作用,谁能告诉我我在这里搞砸了什么?

这是我的代码:

import urllib2
import re
import xml.etree.ElementTree as ET

text = ET.fromstring(F_D.text.encode('UTF-8'))
text = ET.fromstring(P.text.encode('UTF-8'))
F_D=requests.get('http://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms')
P=requests.get('http://en.wikipedia.org/wiki/Wikipedia:Unusual_articles')  
links = text.findall('.//*[@id=”mw-content-text”]/p/a')

links=E_D

E_D = graph_dict
E_D[start] = 0

for vertex in E_D:
    F_D[vertex] = E_D[vertex]
    if vertex == end: break

    for edge in graph[vertex]:
        path_distance = F_D[vertex] + graph[vertex][edge]
        if edge in F_D:
            if path_distance < F_D[edge]:
                #raise ValueError,
            elif edge not in E_D or path_distance < E_D[edge]:
                E_D[edge] = path_distance
                [edge] = vertex
return (F_D,P)

def Shortest_Path(graph,start,end):
  F_D,P = D_Algorithm(graph,start,end)
  path = []
  while 1:
    path.append(end)
    if end == start: break
    end = P[end]
  path.reverse()
  return path
4

2 回答 2

2

我们正在研究图探索……你为什么要考虑 Dijkstra 算法???恕我直言...改变方法。

首先,您需要一个好的启发式函数。对于您扩展的每个节点,您需要估计该节点与目标/目标节点的距离。现在......你如何计算启发式是这里真正的挑战。您可能会在当前 wiki 页面和您的目标页面之间进行关键字映射。匹配的百分比可能会为您提供估计值。或者...尝试猜测两个页面之间内容的相关性。我有一种预感......也许神经网络可以帮助你。但是,这也可能不表示最佳估计。我不确定。一旦找到合适的方法,请使用 A* 搜索算法。

搜索和探索启发式功能,不要去广度优先搜索,你最终会在广阔的维基百科世界中无处可去!

于 2013-04-16T06:18:19.907 回答
-1

鉴于维基百科上的文章数量,计算最短的时间将花费无法承受的时间(我的假设 - 我没有尝试过)。

真正的问题是在两篇文章之间找到一条可接受且有效的短路径。

处理此类问题的算法与旅行商问题有关。这可能是一个很好的起点。

IIRC google 或 yahoo bots 使用Ant Colony 优化来获得最短可接受的优化时间。您可以查看这个 SO 问题:我在哪里可以了解有关“蚁群”优化的更多信息?

我个人也喜欢在一定时间内找到可接受的最优值的遗传算法方法。


我刚刚看过那张图片,它将 2013 年 en.wikipedia.com 的文章数量设置为 4.000.000。确实比我想象的要少得多。

编辑:我首先说这是一个 NP-Hard 问题,评论者解释说不是。

于 2013-04-13T19:59:01.553 回答