位置层次数据结构

时间:2013-05-14 09:18:35

标签: java data-structures graph tree

位置层次结构的数据结构或数据模型

I have the following location types,

Airport
City
State
Country

Hierarchy is Country has a state, State has a City and a City has airport.

City:San Francisco To City:Frankfort    Rate is 100$ is stored in the system in some form.

当一个人向机场询问费率:SFO To Airport:FRA,申请时应查找机场的任何费率:SFO To Airport:FRA。

由于我们没有(我们只有城市到城市),应用程序应该检查一个级别更高的机场,即城市。因此应用程序应该能够找到机场之城:SFO和机场之城:法兰克福并检查费率是否可用。在这种情况下,它获得100美元作为城市:旧金山到城市:法兰克福率维持在100美元。

如何在数据结构中表示此位置层次结构(在Java中)?图表或树会有用吗?如果是这样,请给我一些样品。

2 个答案:

答案 0 :(得分:0)

IMO,有两种方式自下而上或自上而下(尽管两者实际上都是基于HAS-A关系:

自下而上:

1,有班机场,城市,州,国家

2,机场有城市,城市有州,州有国家变量

现在,无论何时您想要费率,您都可以转到机场对象,检查City-> State-> Country等并相应收费

<强>自上而下:

1,有国家,州,市,机场等课程

2,国家将有一个包含州的名单,州将有城市名单和城市将有机场名单

我更喜欢第一个,因为保持父亲的1个值比维护所有孩子的列表更容易/更有效。

答案 1 :(得分:0)

你可以试试下面的树结构

优点

1.跨不同位置类型的统一数据结构。

2.如果添加新的位置类型,则无需新课程。

3.parent lookups变得容易。

4.父母的遍历遍历成为可能。

5.可以对孩子进行递归遍历。

public class Location
{
    private LocationType locationType;
    private Set<Location> children = new HashSet<Location>();
    private Location parent;

    public int rateTo(Location location)
    {
        int rate = -1;

        Location from = this;
        Location to = location;

        do
        {
            rate = getRate(from, to);
            if (rate > -1)
                break;

            from = from.parent;
            to = to.parent;

            if (from == null || to == null)
                break;
        } while (true);

        return rate;
    }

    public void addChildLocation(Location child)
    {
        child.parent = this;
        children.add(child);
    }

    public int getRate(Location from, Location to)
    {
        //1. implement your own database lookup, etc......
        //2. take care of reverse location parameters also...
        return -1;
    }

    public enum LocationType
    {
        Airport,
        City,
        State,
        Country
    }
}