/**
* 功能:java
[java] view plain copyapp
- /**
- * 思路:
- * 1)針對每一個朋友ID,找出所在機器的位置:int machine_index=getMachineIDForUser(personID);
- * 2)轉到編號爲#machine_index的機器。
- * 3)在那臺機器上,執行:Person friend=getPersonWithID(person_id)。
- *
- * 定義一個Server類,包含一份全部機器的列表,還有一個Machine類,表明一臺單獨的機器。經過散列表,有效地查找數據。
- *
- */
-
- class Server{
- HashMap<Integer,Machine> machines=new HashMap<Integer, Machine>();
- HashMap<Integer,Integer> personToMachineMap=new HashMap<Integer, Integer>();
-
- public Machine getMachineWithId(int machineID){
- return machines.get(machineID);
- }
-
- public int getMachineIDForUser(int personID){
- return personToMachineMap.get(personID);
- }
-
- public Person getPersonWithId(int personID){
- Integer machineID=getMachineIDForUser(personID);
- if(machineID==null)
- return null;
- Machine machine=getMachineWithId(machineID);
- if(machine==null)
- return null;
- return machine.getPersonWithId(personID);
- }
-
- }
-
- class Machine{
- public int machineID;
- public HashMap<Integer,Person> persons=new HashMap<Integer, Person>();
-
- public Person getPersonWithId(int personID){
- return persons.get(personID);
- }
-
- }
-
- class Person{
- private int personID;
- private ArrayList<Integer> friendID;
-
- public Person(int id){
- this.personID=id;
- }
-
- public int getID(){
- return this.personID;
- }
-
- public void addFriend(int id){
- this.friendID.add(id);
- }
-
- }
-
- /**
- * 優化:減小機器間跳轉次數
- * 從一臺機器跳轉到另一臺機器的開銷很昂貴,不要爲了找到某個朋友就在機器之間任意跳轉,而是試着批處理這些跳轉動做。
- * 優化:智能劃分用戶和機器
- * 根據地域劃分
- *
- * 問題:廣度優先搜索要求標記訪問過的節點,如何處理
- * 同一時間可能會執行不少搜索操做,所以直接編輯數據的作法並不穩當。能夠利用散列表模仿節點的標記動做,以查詢節點id,是否被訪問過。
- */