【问题标题】:How to create a spanning tree如何创建生成树
【发布时间】:2009-08-07 13:57:24
【问题描述】:

我有一个用于 Java 中各种可用地址格式的有向图,其中包括循环。除了上述模板之外,我还想存储作为该图范围的用户地址。我的图表是从下面的 XML 中获得的:

<address>
    <city start="true">
        <minicity />
        <street />
        <square />
    </city>
    <minicity>
        <street />
        <alley />
        <square />
    </minicity>
    <street>
        <street />
        <alley />
        <blibd />
    </street>
    <square>
        <street />
        <alley />
        <blibd />
    </square>
    <alley final="true">
        <alley />
        <blibd />
        <plaque />
    </alley>
    <blibd final="true">
        <alley />
        <blibd />
        <plaque />
    </blibd>
    <plaque final="true">
        <stage />
        <unit />
    </plaque>
    <stage final="true">
        <unit />
    </stage>
    <unit final="true">
    </unit>
</address>

如您所见,图中的街道节点在其上方有一个循环。用户地址示例如下所示:

城市:a 街道:b 街道:c 街道:d 小巷:f

我的问题是: 存储用户地址图的最佳方式是什么?我有上面的模板图,想知道将用户图保存在这个模板内还是在不同的结构之外更好。

【问题讨论】:

    标签: java xml algorithm


    【解决方案1】:

    adjacency matrix 是表示图形的标准方式。在您的情况下,矩阵的每个元素都可以补充节点类别(城市等)。

    可以通过存储对给定地址的最内层节点的单独引用并向外追踪到城市级别以构造地址来获得用户的地址。

    我个人可能会选择比通用图表更结构化的方法,创建城市、街道等业务对象,从而强制执行地址结构;例如

    public interface Residence {
      int getNumber();
      Street getStreet();
    }
    
    public interface Street {
      City getCity();
    }
    
    public interface City {
      Country getAddress();
    }
    

    要显示给定住宅的地址,我只需遍历对象图即可;例如

    Residence r = ...
    System.err.println(String.format("%d %s %s %s", r.getNumber(), r.getStreet(), r.getStreet().getCity(), r.getStreet().getCity().getCountry()));
    

    【讨论】:

    • 我图中的每个节点都是一个类,它具有一些设置子节点的功能
    • 您是否必须以这种通用方式对其进行建模?为什么不将其转换为更有意义的业务对象来强制执行某种结构?
    • 因为我不想让用户输入每一种地址组合,因为我想制作可重用的代码,所以我制作了一个 AddressNode 类并使用 addressnode 类制作树结构
    • 如果不了解问题的更多信息就很难判断,但这听起来并不需要图形解决方案,除非您对计算地址之间的距离/路线等内容感兴趣。如果这只是存储地址的情况,那么还有更简单的方法(例如存储邮政编码 [或邮政编码] + 街道 + 门牌号)。
    • 它在美国可能有用,但在我正在为大学生开发社交网络的国家,使用邮政编码没有用,所以我需要以这种格式存储地址才能对此进行一些计算
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多