代码之家  ›  专栏  ›  技术社区  ›  Alessandroempire

用散列码在Java中实现Dijkstra算法

  •  1
  • Alessandroempire  · 技术社区  · 11 年前

    我的图的实现是以下哈希表:

    public class DiGraphHash{
    
    private int numNodos, numArcos;
    private TheList<Nodo> nodos[];
    private TheList<Arco> arcos[];
    private TheList<Arco> preds[];
    

    }

    其中TheList是我自己制作的列表。

    对于Dijkstra的算法,我需要映射每个节点的成本和到达该节点的路径。 我有以下两个数组:

       int[] cost = new cost[num_nodes];
       Nodo[] path = new Nodo[num_nodes];
    

    另一个重要的细节是,我的节点将是字母A、B、C、D。

    因此,当我映射节点时,例如,假设我必须将成本分配给节点A,我如何在数组中找到位置?

    我曾考虑使用哈希代码%array.length,但我不确定是否会发生冲突(考虑到它只有1个字符)

    我不是在问代码,我需要这个想法。

    1 回复  |  直到 11 年前
        1
  •  1
  •   Daniel F. Thornton    11 年前

    两个想法:

    1. 添加一个 cost 字段到您的 Nodo 班这样,您只需要管理一个节点阵列,而不需要单独管理一个成本阵列。您可以在实例化节点时分配成本,并在以后轻松查找它们。

    2. 比两个数组更好的数据结构可能是映射,其中键是节点本身,值是节点的成本。下面是一个例子:

    HashMap<Nodo, Integer> nodesToCosts = new HashMap<Nodo, Integer>();
    
    nodes.put(nodeA, new Integer(5));
    nodes.put(nodeB, new Integer(20));
    nodes.put(nodeC, new Integer(10));
    nodes.put(nodeD, new Integer(5));