这个项目的最后期限即将到来,我没有太多时间处理剩下的事情。所以,我不是在寻找最好(也可能更复杂/耗时)的算法,而是在寻找最简单的算法来实现一个图结构上的几个操作。
我需要执行以下操作:
- 给定距离X,列出图网络中的所有用户。 - 给定距离X和关系类型,列出图网络中的所有用户。 - 给定关系类型,计算图网络上两个用户之间的最短路径。 - 计算图网络上两个用户之间的最大距离。 - 计算图网络上最远的连接用户。
关于我的图实现,有一些注意事项:
- 边节点有两个属性,一个是
关于我需要做什么的了解:
- 对于两个用户之间的最短路径,我不知道是否像我上面说的那样最容易,但我相信Dijkstra算法似乎经常被人们推荐,所以我想选择它。
- 我一直在搜索,但很难实现这个算法,有人知道任何易于理解的教程或东西,可以让我自己实现这个算法吗?如果可能的话,用C源代码示例会很有帮助。我看到了很多数学符号的例子,但那只会让我更加困惑。 - 你认为如果我将图“转换”为邻接矩阵来表示链接权重和关系类型,是否会有帮助?是否在列表上执行该算法比邻接矩阵更容易?当需要时,我可以轻松地实现执行该转换的函数。我之所以这么说,是因为在阅读几页有关此主题的文章后,我有一种感觉,那就是使用邻接矩阵会更容易,但我可能错了。
除了以上操作外,我对其他4个操作没有任何想法,你有什么建议吗?
我需要执行以下操作:
- 给定距离X,列出图网络中的所有用户。 - 给定距离X和关系类型,列出图网络中的所有用户。 - 给定关系类型,计算图网络上两个用户之间的最短路径。 - 计算图网络上两个用户之间的最大距离。 - 计算图网络上最远的连接用户。
关于我的图实现,有一些注意事项:
- 边节点有两个属性,一个是
char
类型,另一个是int
类型。它们分别表示关系类型和权重。
- 图使用链表实现,对于顶点和边都是如此。我的意思是,每个顶点指向下一个顶点,并且每个顶点还指向另一个链表的头部,该链表存储该特定顶点的边。关于我需要做什么的了解:
- 对于两个用户之间的最短路径,我不知道是否像我上面说的那样最容易,但我相信Dijkstra算法似乎经常被人们推荐,所以我想选择它。
- 我一直在搜索,但很难实现这个算法,有人知道任何易于理解的教程或东西,可以让我自己实现这个算法吗?如果可能的话,用C源代码示例会很有帮助。我看到了很多数学符号的例子,但那只会让我更加困惑。 - 你认为如果我将图“转换”为邻接矩阵来表示链接权重和关系类型,是否会有帮助?是否在列表上执行该算法比邻接矩阵更容易?当需要时,我可以轻松地实现执行该转换的函数。我之所以这么说,是因为在阅读几页有关此主题的文章后,我有一种感觉,那就是使用邻接矩阵会更容易,但我可能错了。
除了以上操作外,我对其他4个操作没有任何想法,你有什么建议吗?
time.h
中的clock()
做了一个快速估计,计算图形的直径需要大约6个小时才能在朋友的Mac上完成(我正在使用Linux虚拟机,所以需要近两倍的时间)。这正常吗?样本数据恰好有18484个节点。 - rfgamaral