文章目录

  • 如何使用算法解决问题
    • 算法解决问题思路
      • 调度的问题
      • 投资问题(组合优化的问题)

如何使用算法解决问题


计算复杂问题关于是不是难解的边界问题,可以从上图我们可以知道算法大概包含三个主要内容,以及一些概念。下面说一下,如何使用算法求解的流程。

算法解决问题思路


这里举一个例子:

调度的问题


从这问题中,通过直觉感觉到耗时少的放到前面可以达到最优,这样是一种贪心的策略

然后,我们可以找到规律,一个任务执行多次与它所在的位置有关系(下面的目标函数构建)。接下来对抽象的问题建模。

接下来如何验证我们的假设对不对呢

我们举了两个情况,一个时间长的任务放到前面,另一个时间长的任务放到后面,比较他们的大小。跟我们直觉相一致。
但有时候直觉不一定可靠,如下面的问题:

这里仍然使用贪心的方法去解

我们找到了反例也就是另一种最优解。可以理解,重量与价值,不一定具有相关性,所以这种贪心的策略不对。
通过上例,可以总结出如何设计算法:

投资问题(组合优化的问题)



建模设置一个向量记录选用项目的金额,目标函数当然让效益最大啦,当然也要让对项目投资金额小于总钱数。
下面以穷举为例计算一下复杂度:

可行解(也就是上面说的记录选用项目的金额的向量),比如我们选择金额<1,2,3,1>,依次是第1,2,3,1的项目;将金额使用0、1表示这样使可行解序列化,也就是说1的个数相加始终为7(总金额),使用3个0来拆分1,这样可以确定选择了4个项目的金额(比如<1,2,3,1>,0不能位于首尾,要不然拆分的不是4个项目。。)


m个1,n-1个0所以有m+n-1个位置。我们把m个位置放1,也就是求它的组合数。epsilon>0,所以是指数函数,复杂度高。

如何使用算法解决问题相关推荐

  1. 数据结构与算法--解决问题的方法-顺时针打印矩阵

    顺时针打印矩阵 题目输入一个矩阵,按照从外向里顺时针的顺序依次打印每一个数字.例如下案例: 如上图矩阵,顺时针打印:1,2,3,4,8,12,16,15,14,13,9,5,6,7,1,10 以上问题 ...

  2. 数据结构与算法--解决问题的方法- 二叉树的的镜像

    解决问题的思路 工作中遇到的问题可能用到的数据结构由很多,并且各种数据结构都不简单,我们不可能光凭借想象就能得到问题的解法,因此画图是在家具问题过程中用来帮助自己分析,推理的常用手段.很多问题比较抽象 ...

  3. 扩展欧几里德算法解决问题A:Jugs

    Jugs codeup的Jugs题目需要使用扩展欧几里德算法解决: Zoj的jugs题目需要使用BFS算法解决: codeup的Jugs题目需要使用扩展欧几里德算法解决: 题目链接:http://co ...

  4. 蛮力算法解决问题(c语言)

    文章目录 前言 一.实验步骤及结果 前言 解决以下问题: 1.背包问题的蛮力解决法 [问题描述]有n个重量分别为{w1,w2,-,wn}的物品,它们的价值分别为{v1,v2,-,vn},给定一个容量为 ...

  5. 分治算法解决问题(c语言)

    文章目录 前言 一.第一题:实验步骤及结果 二.第二题:实验步骤及结果 前言 解决以下两个问题: 1.实现10个数据的快速排序(升序); 2.有一个数组A[10],里面存放了10个整数,顺序递增.任意 ...

  6. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  7. 迭代法移动盘子java,算法学习--日记(牛顿迭代法)

    牛顿迭代法 概念理解 牛顿迭代法可以使用函数极限角度无限迭代趋近于某一点理解. 迭代算法解决问题,需要做好3个方面的工作: 确定迭代变量 在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由 ...

  8. 算法工程师必知必会10大基础算法!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Cricode  博客园 来源:博客园 链接:http://kb. ...

  9. 程序员必须掌握哪些算法?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:深度学习与计算机视觉 作者:Cat Chen https ...

最新文章

  1. Oracle二三事之 12c 可插拔数据库PDB
  2. linux文件cache的框框架架以及相关的数据结构
  3. Input子系统(二)【转】
  4. 取消一个请求(Cancel)
  5. C# SuperSocket服务端入门(一)
  6. 5.有2个数组,第一个数组内容为:[黑龙江省,浙江省,江西省,广东省,福建省], 第二个数组为:[哈尔滨,杭州,南昌,广州,福州], 将第一个数组元素作为key,第二个
  7. ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证
  8. Invalid bean definition with name ‘dataSourceCSS‘ dfined in class path resource[xxx]
  9. Web研发模式演变史
  10. Visual Object Classes Challenge 2012 (VOC2012) 简介
  11. ubuntu 20.04gitlab-runner docker方式安装使用
  12. 电子设计教程7:线性稳压电源的工作原理
  13. panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
  14. filebeat7.7.0相关详细配置预览- Filebeat inputs
  15. 第七次前端培训(JavaScript)
  16. 立体像对空间前方交会算法
  17. [论文翻译]Deep learning
  18. Python菜鸟入门基础篇,零基础小白必看
  19. 阿里云弹性公网IP(EIP)带宽最大值可选1000Mbps
  20. linux输入法管理员权限,Linux 输入法设置

热门文章

  1. 解决棘手SQL性能问题,我的SQLT使用心得
  2. 干掉 Swagger-ui !试试这个新工具
  3. infoq 视频_InfoQ的2017年顶级软件开发人员案例,视频和播客
  4. WinRAR 5.71 正式版发布
  5. YunTable开发日记(16)-教程(0.9版RC)
  6. 大厂技术高管如何融入创业公司
  7. 计算机专业英语选词填空,英语专业四级考试_大学英语四级选词填空练习(七)_沪江英语...
  8. 解决idea环境gradle构建报错:Unrecognized option: --add-opens=java.base/java.util.concurrent.atom
  9. 2021 第十二届蓝桥杯大赛软件赛决赛, 国赛,C/C++ 大学B 组
  10. 怎么把PDF文件分割成单独的几页