%% 算法設計需要考慮的點 %% 能夠解決業務問題,高效(大流量應用)穩定(穩定體現在哪些方面呢?不會因爲數據量太大,導致效率變差) %% 確定算法的選型和數據結構的選型 %% 全面分析任務對數據處理和計算的基本操作,根據基本操作中的優劣去選用合適的數據結構 %% 全面分析代碼消耗的資源是什麼(時間複雜度+空間複雜度)| 關注時間和空間消耗與輸入量之間的關係 %% 時間複雜度和代碼設計結構以及數據結構有緊密的關係 %% 怎麼剔除的無效數據;時空轉換 %% 1.對數據的操作有哪些 -> 排序,查找,刪除 %% 2.時間複雜度是多少 %% 3.空間複雜度是多少 %% 4.數據的輸入量是多少 %% 5.數據處理能夠接受的時間是多少 %% 6.不能出現時間爆炸和空間爆炸 %% (空間爆炸是什麼意思?分爲兩種考慮, %% 第一種如果消息沒有及時處理,導致發送的消息保存在內存中,在erlang中的表現就是大量的mailbox堆積 %% 第二種因爲用空間換時間,導致空間佔用過大,導致內存分配不足:如dialyzer的處理,先預處理了很多東西,導致dialyzer失敗,內存分配過大奔潰) %% %% 排行榜處理的基本思路 %% 第一步:將之前保存的玩家數據列表更新 %% 1.1 循環遍歷需要更新的玩家列表 %% 1.2 循環遍歷總的玩家列表數據,找到相同的玩家id,並在總的玩家列表中替換爲最新的數據,如果沒有,則新增到這個總玩家列表中 %% 操作:查找,新增,改動 %% 高頻的使用查找,新增,改動,要在O(1)的時間複雜度內完成查找動作,只有字典類型-- 待選的數據結構可以使用map數據結構 %% 第二步:對最新的排行榜數據進行排序,是一個列表 %% 2.1 對列表進行排序 %% 數據的操作 %% 1.查找,刪除,新增,全部返回 %% 1.1 查找,新增,改動 可以用map算是實現O(1)的操作 %% 1.2 全部返回,如果保存在一個列表中是可以全部返回的 %% 業務需求 %% 1.原始數據有序,改變的數據有序 %% 2.將兩個有序的數組進行重新排序 %% 排行榜分析 %% 1.這段代碼對數據進行了那些操作 %% - 查找數據,新增數據,修改數據,刪除數據,以及數據排序 %% 2.這些操作中,那個操作最影響效率,對時間複雜度的損耗最大 %% - 修改數據和排序數據(查找數據,新增數據) %% 3.那種數據結構能夠幫助你提高數據操作的使用效率 %% - map結構可以解決前面的查找,新增,刪除數據;但是排序的處理差異比較大