一个实用的矩阵链乘法DP算法实现

matrix_resolve.h

#ifndef _MATRIX_RESOLVE_H_
#define _MATRIX_RESOLVE_H_
#include <string.h>
#include "matrix.h"
#include "resolve.h"

struct meta_resolve
{
   
	unsigned int evaluation_value;
	std::string solution;
	unsigned int m_row;
	unsigned int m_col;
	math_use::matrix<float> m_matrix;
	friend std::ostream& operator << (std::ostream &of, const struct meta_resolve& m_meta) {
   
		of << "<" << m_meta.evaluation_value << "," <<  m_meta.solution << "," << m_meta.m_row << "," << m_meta.m_col << ">" << std::endl;
		return of;
	}
	friend struct meta_resolve operator * (const struct meta_resolve& _lhs, const struct meta_resolve& _rhs)
	{
   
		struct meta_resolve m_meta_matrix(_lhs);
		m_meta_matrix.evaluation_value = _lhs.evaluation_value + _rhs.evaluation_value + _lhs.m_row * _rhs.m_row * _rhs.m_col;
		m_meta_matrix.solution = "(" + _lhs.solution + "," + _rhs.solution + ")";
		m_meta_matrix.m_row = _lhs.m_row;
		m_meta_matrix.m_col = _rhs.m_col;
		m_meta_matrix.m_matrix = _lhs.m_matrix * _rhs.m_matrix;
		return m_meta_matrix;
	}
	friend struct meta_resolve& operator *= (struct meta_resolve& _lhs, const struct meta_resolve& _rhs)
	{
   
		struct meta_resolve m_result(_lhs);
		_lhs = m_result * _rhs;
		return _lhs;
	}
};
class matrix_resolve : public Resolve
{
   
	private:
	        math_use::matrix<struct meta_resolve > m_dp_result;		

	private:
		void string_analysis();
		void dp_alogorithm();
		void continue_multiply();

	public:
		matrix_resolve() {
   }
		virtual ~matrix_resolve() {
   }
		virtual void read_para();
		virtual void print();
		virtual void fun();
};
void *thread_matrix_multi_use(void *m_comm);
#endif

matrix_resolve.cpp

#include <iostream>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值