gpt4 book ai didi

c++ - 在数组 C++ 中查找最频繁的值和中值

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:02 25 4
gpt4 key购买 nike

我想使用 C++ 查找给定数组的最频繁值和中值。我假设我有一个 float 组,例如

float *LRArr=new LRArr[1000];

数组由随机 float 填充。

std::default_random_engine generator;
generator.seed( rd() );
std::uniform_real_distribution<> distribution(0, 10);
for(int j=0;j<1000;j++)
{
LRArr[j]=distribution(generator)
}

现在我想获取数组中出现次数最多的值。但是需要很多时间。你能向我建议用 C 或 C++ 实现它的更快方法吗?我假设我有 LRArr

LRArr={0.1,1.2,6.5,6.5,4.5,6.5}
==>output is: 6.5 and median 5.5

这是我的方式:

float getMostFreq(float* LRArr;int sizeLRArr)
{
int count = 1;
int currentIndex = 0;
for (int i = 1; i < sizeLRArr; i++)
{
if (LRArr[i] == LRArr[currentIndex])
count++;
else
count--;
if (count == 0)
{
currentIndex = i;
count = 1;
}
}
mostFreq = LRArr[currentIndex];
return mostFreq;
}

最佳答案

计算数组中浮点值频率的一种方法是计算直方图并对其进行排序。但是您应该考虑到应该定义您的值的范围。这样,精度取决于直方图箱的数量:

#include <algorithm>

#define histogramCount 10000
#define upperRange 1000
#define lowerRange 0

class histogram_data
{
public:
int frequency;
int index;
};

bool SortPredicate(const histogram_data& d1, const histogram_data& d2)
{
return d1.frequency> d2.frequency;
}


void computeHistogram(float * array, int len)
{

std::vector<histogram_data> histogram;

for(int i=0;i<histogramCount;i++)
{
histogram_data hdata;
hdata.frequency=0;
hdata.index=i;
histogram.push_back(hdata);
}


for(int i=0;i<len;i++)
{
histogram[(array[i]/(upperRange-lowerRange))*(histogramCount-1)].frequency++;
}

//sorting the histogram in descending order

std::sort(histogram.begin(),histogram.end(),SortPredicate);

}

现在值的频率按降序存储在直方图中。因此可以通过以下方式获取最频繁的值:

float mostFrequent = ((float)histogram[0].index/(float)(histogramCount-1))*(upperRange-lowerRange);

关于c++ - 在数组 C++ 中查找最频繁的值和中值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com