下面针对此问题的最佳算法是什么? 我很好奇看到解决方案/想法stackoverflow社区可以提出来!
我们假设定时寄存器“ X”从任意随机数开始计数 在0到5000之间的数字,然后随机地不均匀地增加 率。如果计时器超过5000,它将重置为0并启动 计数过程又一次。每个循环都可以定义为一个集群,并且 “合法”聚类边界设置为0到1000。 “非法”群集的数据点在1001到5000之间。
函数
count_time()
可以从以下位置读取寄存器“ X”的值: 任何给定的时间。您将需要编写一个计算总数的算法函数 法律集群,并将收集每个内部的所有数据点 簇。该算法将拒绝1001之间的数据点 和5000,并且还将跟踪“非法”群集。这个 可以根据需要频繁调用算法功能
下面的代码可能是示例解决方案框架,但是,它可能不是最好的解决方案:
int repeat_every_1ms(void) //this function is called every 1ms
{
static int unsigned count = 0;
static int unsigned cluster = 1;
static int unsigned legal_cluster = 1;
static int unsigned illegal_cluster = 1;
if (count >= count_time()) {
//inside a cluster.it could be either legal or illegal.
cluster++;
count = count_time(); // Line 1
if(count <= 1000) {
legal_cluster++;
/* Start collecting data points (code not given) */
// more statements...
}
count = count_time(); // polling count_time() value beacuse it can be different than Line 1
if(count > 1000) {
illegal_cluster++;
}
}
count = count_time(); //get the final timestamp
return 0;
}