創建map的時間復雜度?
多重嵌套 for 循環太丑,運行效率又低,有沒有什么辦法可以降低它的嵌套層數?游戲內怎么簡潔優雅的獲取我想要的數據,又有良好的智能提示效果? 有沒有通用的提高運行效率的方案?沒錯,ES6 的 Map 就是為你定制的。 先看一個簡單的例子,數組去重:
上面用了最基本的2重 for 循環遍歷數組達到去重的效果,代碼運行效率低,時間復雜度達到了O(n2),如何優化成一重for循環呢?用 Map 試一試! Map 是 ES6 新出的一種數據結構,用來表示鍵值對,object也是鍵值對結構,Map算是對object的一種加強,object的鍵只能為string,Map的鍵可以為任意值。我們用Map來存儲中間遍歷的值,從而可以達到一輪for循環就完成去重的目的,如下:
很明顯,上面通過 Map 減少了一層for循環,將時間復雜度降到了O(n),提高了運行效率。 Map這種鍵值對結構(字典,哈希表),可以直接根據鍵名找到對應的值,不需要遍歷,大大提高了查找的效率。我們常用的對象和數組結構也有同樣的效果,但是Map功能更強大,配合ts的智能提示效果更好。 理論分析:為什么用 Map 能提高運行效率呢,仔細思考,發現,這個里面蘊含了一個重要的計算機理論知識——空間換時間!計算機理論里面,對于一個算法,他的時間負責度和空間復雜度是對立的。簡單的理解就是,占用空間多,運行就快,占用空間少,運行就慢。上面的 Map 就是開辟的額外存儲空間,用來保存一些中間狀態,從而將2重 for 循環降低為1重 for 循環,降低了運行時間。 Map的強大還體現在他的充足的智能提示的地方:let and聲明。
上面通過聲明鍵和值的類型,當調用對應的 API 時候,會對參數和返回類型有一個提示作用,這是對象和數組沒有的優勢,而且 Map 的 key 也可以為對象等任意類型,這在有些地方也能起到意向不到的方便作用。 所以游戲中,凡是想提高運行效率,想降低查找等時間消耗的地方,都請盡可能的用Map來解決吧,這一定是一個百試不爽的萬精油方案,而