競賽程式設計中的頻率測量技術
在本文中,我們將探討查詢陣列[]中數字頻率的不同方法。這些方法在解決不同情況下的各種競賽程式設計問題時非常有用。有時,計算陣列中出現的數字或字母的元素頻率是一項複雜的任務。可以使用各種演算法,如搜尋、陣列和分治法,來查詢陣列中定義的重複元素。
注意 - 使用整數陣列。
讓我們探索這篇文章,瞭解如何使用Java程式語言來解決這個問題。
舉幾個例子
示例-1
如果:
Number of Elements in Arr[] = N = 4 Arr[] = [5, 7, 6, 7]
那麼:
Number Frequency 5 1 7 2 6 1
arr | 索引 | 0 | 1 | 2 | 3 |
值 | 5 | 7 | 6 | 7 |
data | 索引 | 0 | 1 | 2 | 3 |
值 |
freq | 索引 | 0 | 1 | 2 | 3 |
值 |
大小 | 0 |
i = 0 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 1 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 2 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 3 | found = FALSE
|
||||||||||||||||||||||||||||||||||||||||||||
i = 4 | i < N $\mathrm{\Rightarrow}$ 4 < 4 $\mathrm{\Rightarrow}$ FALSE $\mathrm{\Rightarrow}$ 迴圈中斷 |
示例-2
如果:
Number of Elements in Arr[] = N = 8 Arr[] = [6, 7, 8, 9, 5, 4, 3, 5]
那麼:
Number Frequency 3 1 4 1 5 2 6 1 7 1 8 1 9 1
語法
為了儲存元素的頻率,可以使用內建的Map介面。
下面是它的語法:
map<int, int> freqCounter;
這裡,頻率計數器用於儲存頻率,第一個元素是“鍵”,第二個元素是“值”,對應於“鍵”。
多種方法
我們提供了多種方法的解決方案。
透過兩個名為data[] 和 freq[] 的陣列,透過它們的索引進行對映。
透過使用“map”來儲存資料和頻率。
方法-1:使用兩個陣列data[] 和 freq[],透過它們的索引進行對映
在這個演算法中,使用了兩個不同的陣列data[] 和 freq[]。data[] 用於儲存唯一元素,freq[] 用於儲存頻率。在這種情況下,data[] 和 freq[] 陣列透過索引進行對映。
演算法 1
步驟-1:向用戶詢問N(陣列中存在的元素數量)。
步驟-2:向用戶詢問arr[] 的N個元素。
步驟-3:建立兩個名為data[N] 和 freq[N] 的整數陣列。
步驟-4:建立整數變數“size”。
步驟-5:外迴圈 (i=0 到 N-1)
步驟-6:設定 found = FALSE
步驟-7:內迴圈 (j=0 到 size-1)
步驟-8:如果 arr[i] == data[j],則
步驟-9:將freq[j] 加1
步驟-10:設定 found = TRUE
步驟-11:中斷內迴圈
步驟-12:如果 found == FALSE,則
步驟-13:設定 data[size] = arr[i]
步驟-14:設定 freq[size] = 1
步驟-15:將size 加1
步驟-16:顯示data[] 陣列和 freq[] 陣列。
步驟-17:退出
示例
#include <iostream> using namespace std; /** * find and print the frequency * * @param arr: array is an integer array * @param N: Number of elements present in arr[] */ void displayFreq(int arr[], int N) { // create 2 arrays // one for storing data // second for storing frequency int data[N], freq[N], size = 0; // traverse the array for (int i=0; i<N; ++i) { bool found = false; // check for arr[i] in data[] array for (int j=0; j<size; ++j) { if (arr[i] == data[j]) { freq[j] += 1; found = true; break; } } // if arr[i] not found in data[] array if (found == false) { data[size] = arr[i]; freq[size] = 1; size += 1; } } // display the result cout << "Number\tFrequency\n"; for (int i=0; i<size; ++i) { cout << data[i]<< "\t" << freq[i] << endl; } } int main() { // declare N, and arr[] int N, arr[10000]; cout << "Enter the required number: "; cin >> N; // Input elements in the array cout << "Enter " << N << " Numbers separated by SPACE: "; for (int i=0; i<N; ++i) { cin >> arr[i]; } // call the function displayFreq(arr, N); return 0; }
輸出
Enter the required number: 7 Enter 7 Numbers separated by SPACE: 9 5 4 9 7 5 3 Number Frequency 9 2 5 2 4 1 7 1 3 1
方法-2:使用“map”儲存資料和頻率。
此演算法使用“map”資料型別以鍵值對的形式儲存資料和頻率。
演算法
步驟-1:向用戶詢問N(陣列中存在的元素數量)。
步驟-2:向用戶詢問arr[] 的N個元素。
步驟-3:建立一個Map來儲存頻率
步驟-4:對於arr[] 的每個元素,增加已建立Map中的頻率計數器
步驟-5:在控制檯中顯示元素及其頻率。
步驟-6:退出
示例
#include <iostream> #include <map> using namespace std; /** * find and print the frequency * * @param arr: array is an integer array * @param N: Number of elements present in arr[] */ void displayFrequency(int arr[], int N) { // create map with the name freqCounter map<int, int> freqCounter; // traverse each element of array for (int i=0; i<N; ++i) { // check for arr[i] in map "freqCounter" if (freqCounter.find(arr[i]) == freqCounter.end()) { freqCounter.insert({arr[i], 1}); } else { freqCounter[arr[i]] += 1; } } // display the result cout << "Number\tFrequency\n"; std::map<int, int>::iterator ptr = freqCounter.begin(); while (ptr != freqCounter.end()) { cout << ptr->first << "\t" << ptr->second << "\n"; ++ptr; } } int main() { // declare N, and arr[] int N, arr[10000]; cout << "Enter the required number: "; cin >> N; // Input elements in the array cout << "Enter " << N << " Numbers separated by SPACE: "; for (int i=0; i<N; ++i) { cin >> arr[i]; } // call the function displayFrequency(arr, N); return 0; }
輸出
Enter the required number: 10 Enter 10 Numbers separated by SPACE: 5 6 7 9 8 5 4 3 6 5 Number Frequency 3 1 4 1 5 3 6 2 7 1 8 1 9 1
這個問題透過三種不同的方法來解決,這取決於任務的需求。本文闡述了計算陣列中出現的元素頻率的方法。