c++ 动态规划

C++或 c 语言 同时被 2 个专栏收录
6 篇文章 0 订阅
59 篇文章 7 订阅

这几天尝试将以前用 java 编写的动态规划程序转化为 c++,发现 c++ 反而运算速度更慢呢,觉得可能有以下几条原因:

  • 在递归运算时,为了加快运算速度,使用 map 类型存储计算过的数据。但 c++ 的 map 没有 java 的 hash map 查找速度快。c++ 中的 map 可以转化为 unordered_map,但我总是出错,c++ 自定义类的 hash 值定义比 java 麻烦多了。

  • 若使用 vector 容器存储计算过的数据,速度应该能快不少。但是动态规划不同的状态以及对应的结果在 vector 里要能很快找到。跟一位认识的朋友聊过,可以近似用进制转换的思想:将动态规划中的状态转化为 vector 的索引。但是我觉得浪费了很多 vector 的空间,小规模问题这种方法还是蛮不错的。

  • 我试了试用 vector 或数组记录递归运算结果,速度比 map 快了些,但仍然比 java 慢,不知道什么原因。

  • java 在递归运算时,hash map 有一个函数 computeIfAbsent 计算查找速度特别快,而 c++ 中的 map 自带的 find 函数大大拖累了速度。

  • 我估计在使用 c++ 中的 map 类型时,要进行更多设置,但目前还不清楚怎么弄。

虽然 c++ 原则上比 java 运算速度快,但是经过这两天的折腾,发现 c++ 太难用了,java 的很多函数与功能都可以看做是对 c++ 的改进。当然,也可能是我对 c++ 不熟的缘故。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值