多重集合的重数和众数计算:C++实现及详解
多重集合的重数和众数计算
本文介绍如何计算一个多重集合的重数和众数。
实现思路
- 统计每个元素在多重集合中出现的次数,得到一个元素-重数的键值对集合。
- 找到键值对集合中重数最大的元素,这个元素就是多重集合的众数。
- 将所有元素的重数相加,得到多重集合的重数。
伪代码
// 输入多重集合S
S = {1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4}
// 统计每个元素的重数
count = {}
for each element e in S:
if e in count:
count[e] += 1
else:
count[e] = 1
// 找到重数最大的元素
mode = None
max_count = 0
for each element e in count:
if count[e] > max_count:
mode = e
max_count = count[e]
// 计算多重集合的总重数
sum_count = 0
for each element e in count:
sum_count += count[e]
C++ 代码
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
// 输入多重集合 S
vector<int> S = {1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4};
// 统计每个元素的重数
unordered_map<int, int> count;
for (int e : S) {
count[e]++;
}
// 找到重数最大的元素
int mode = 0;
int max_count = 0;
for (auto p : count) {
if (p.second > max_count) {
mode = p.first;
max_count = p.second;
}
}
// 计算多重集合的总重数
int sum_count = 0;
for (auto p : count) {
sum_count += p.second;
}
// 输出结果
cout << "众数:" << mode << ",重数:" << max_count << endl;
cout << "多重集合的重数:" << sum_count << endl;
return 0;
}
代码说明:
- 使用
unordered_map存储每个元素及其重数,方便统计和查找。 - 使用循环遍历
unordered_map找到重数最大的元素,即众数。 - 再次遍历
unordered_map计算所有元素重数之和,即多重集合的重数。
注意:
本代码仅供参考,实际应用中可能需要根据具体情况进行调整。
原文地址: https://www.cveoy.top/t/topic/lm1w 著作权归作者所有。请勿转载和采集!