信息安全管理作业

#include<iostream>
#include<vector>
#include <iomanip>
#include<string>
#include<algorithm>

using namespace std;
vector<float> fuction1(vector<vector<float>> v1)
{
	vector<float> sum;
	float sum1 = 0;
	//列向量归一化
	for (int i = 0; i < v1[0].size(); i++)//列数
	{
		sum1 = 0;
		for (int j = 0; j < v1.size(); j++)//行数
		{
			sum1 += v1[j][i];
		}
		sum.push_back(sum1);
	}

	for (int i = 0; i < v1[0].size(); i++)
		for (int j = 0; j < v1.size(); j++)
			v1[i][j] /= sum[j];

	//求行和并归一化
	vector<float> sum2;
	float sum3 = 0;
	for (int i = 0; i < v1[0].size(); i++)
	{
		sum3 = 0;
		for (int j = 0; j < v1.size(); j++)
		{
			sum3 += v1[i][j];
		}
		sum2.push_back(sum3);
	}
	float sum4 = 0;
	for (int i = 0; i < sum2.size(); i++)
		sum4 += sum2[i];
	for (int i = 0; i < sum2.size(); i++)
		sum2[i] /= sum4;
	return sum2;

}
int main()
{
	int n, m;
	cin >> n;
	string haha;
	vector<vector<float>>  a(n, vector<float>(n)); //多维判断矩阵
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
		{
			cin >> haha;
			auto x = find(haha.begin(), haha.end(), '/');
			if (x == haha.end())
				a[i][j] = stof(haha);
			else
			{
				string left(haha.begin(), x);
				string right(x + 1, haha.end());
				a[i][j] = stof(left) / stof(right);
			}
		}
	vector<float>  b(fuction1(a));//特征向量

	cin >> m;
	vector<vector<float>>  t(m, vector<float>(n));
	for (int k = 0; k < n; k++)
	{
		vector<vector<float>>  r(m, vector<float>(m));
		for (int i = 0; i < m; i++)
			for (int j = 0; j < m; j++)
			{
				cin >> haha;
				auto x = find(haha.begin(), haha.end(), '/');
				if (x == haha.end())
					r[i][j] = stof(haha);
				else
				{
					string left(haha.begin(), x);
					string right(x + 1, haha.end());
					r[i][j] = stof(left) / stof(right);
				}
			}
		vector<float>  b1(fuction1(r));
		for (int p = 0; p < m; p++)
		{
			t[p][k] = b1[p];
		}
	}
	//相乘 t 和 b,W2和W3相乘
	vector<float> end;
	float tsum = 0;
	for (int i = 0; i < t.size(); i++)
	{
		tsum = 0;
		for (int j = 0; j < t[0].size(); j++)
		{
			tsum += t[i][j] * b[j];
		}
		end.push_back(tsum);
	}
	for (auto e : end)
		cout << fixed << showpoint << setprecision(4) << e << " ";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值