C/C++实现 自相关函数法求序列的周期
时间: 2023-11-18 11:04:23 浏览: 41
自相关函数法可以用来求序列的周期,具体实现步骤如下:
1. 定义一个长度为n的序列a[],计算序列的自相关函数r[k]。
2. 找到r[k]的最大值,记为r[max],则序列的周期T=max。
3. 检验T是否符合要求,即是否满足a[i]=a[i+T] (0 <= i < n-T)。如果符合要求,则T是序列的周期;否则,继续搜索下一个最大的r[k],重复步骤2和3。
C/C++代码实现如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n; // 序列长度
int a[100]; // 序列
double r[100]; // 自相关函数
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
for(int k = 0; k < n; k++)
{
r[k] = 0;
for(int i = 0; i < n-k; i++)
r[k] += a[i] * a[i+k];
}
int max_index = 0;
for(int k = 1; k < n; k++)
if(r[k] > r[max_index])
max_index = k;
int T = max_index;
while(T < n)
{
bool flag = true;
for(int i = 0; i < n-T; i++)
if(a[i] != a[i+T])
{
flag = false;
break;
}
if(flag)
{
cout << "序列的周期为:" << T << endl;
return 0;
}
T += max_index;
}
cout << "序列没有周期!" << endl;
return 0;
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)