2013-05-14 47 views
2

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

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机场:FRA,应用程序应该从机场提供的任何率:SFO到机场:FRA。由于我们没有一个(我们只有城市到城市),应用程序应该检查高一级的机场是城市。因此应用程序应能够找到机场城市:SFO和机场城市:Frankfort并检查是否有可用的费率。在这种情况下,它收取100美元作为城市:旧金山到城市:法兰克福费率保持为100美元。

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

+0

当你说_应该寻找任何可用的价格_因此你有不同的机场在一个城市或每个机场提供不同的价格? – Sam 2013-05-14 09:27:55

+0

无论如何,我的意思是如果机场到机场的价格不可用,应用程序应该查找城市到城市的价格。 – 2013-05-14 09:31:37

回答

0

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

自下而上:

1,有类机场,城市,省,国家

2,机场有城,城有国家,国家有国家的变量

现在,只要你想要的价格,你转到机场的对象,检查城市 - >状态 - >国家等,并负责accordi ngly

自上而下:

1,有类国家,省份,城市,机场

2,全国将有包含国家列表,国家将有城市和城市的名单将有机场列表

我宁愿第一个,因为维护父母的1值比维护所有孩子的列表更容易/更高效。

+0

如果每个机场都有一个物体,它将如何有效。如果我在旧金山机场接到请求,我该如何获得这个对象?有没有可以提供帮助的数据结构? – 2013-05-14 09:56:49

0

您可以尝试像下面

优势

1.uniform数据结构在不同的位置,类型的一些树结构。

2.如果增加新的位置类型,不需要新类。

3.parent查找变得容易。

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 
    } 
}