競賽程式設計中的頻率測量技術
在本文中,我們將探討查詢陣列[]中數字頻率的不同方法。這些方法在解決不同情況下的各種競賽程式設計問題時非常有用。有時,計算陣列中出現的數字或字母的元素頻率是一項複雜的任務。可以使用各種演算法,如搜尋、陣列和分治法,來查詢陣列中定義的重複元素。
注意 - 使用整數陣列。
讓我們探索這篇文章,瞭解如何使用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
這個問題透過三種不同的方法來解決,這取決於任務的需求。本文闡述了計算陣列中出現的元素頻率的方法。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP