最近購買演算法的教學課程的心得分享。
Counter 演算法,有很多種不同的名稱,但概念都是相近的,算是超入門的演算法。
這種算法非常適用於大量數據的計次,例如數據分析、統計或在處理大量數據時尋找常見模式。
舉個例子,假設你正在開發一個問卷調查分析程式,需要計算每個選項被選中的次數。這時,可以使用Counter算法來輕鬆實現這一功能。
function countElements(arr) { let counter = {}; arr.forEach(element => { if (counter[element]) { counter[element] += 1; } else { counter[element] = 1; } }); return counter; } // 示例使用 let exampleArray = ["apple", "banana", "apple", "orange", "banana", "apple"]; let countedElements = countElements(exampleArray); console.log(countedElements); // 输出: { apple: 3, banana: 2, orange: 1 }
假設你有一個含有大量元素的數組,你需要統計每個元素在數組中出現的次數。如果沒有Counter算法,一個直觀的方法可能是對於數組中的每個元素,都去掃描整個數組來計數,這種方法的時間複雜度是 O(n^2),其中 n 是數組的大小。因為對於每個元素,你都需要遍歷整個數組來計數。
然而,使用Counter算法,你只需遍歷一次數組,即可完成計數。每當遇到一個元素,就在一個對象(或稱為映射)中更新這個元素的計數。這個過程的時間複雜度是 O(n),因為每個元素只被處理一次。
假如你有一個包含10000個單詞的文章,你需要計算每個單詞出現的次數。使用傳統的方法,對於每個單詞,你可能需要再次遍歷整個文件來計數,這會非常耗時。但是,如果使用Counter算法,你只需遍歷文件一次,就可以得到每個單詞的計數。
算法在時間複雜度上的優勢是它能夠以線性時間處理數據,這在處理大量數據時非常有用。