2013-05-14 52 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 
    } 
}