专栏首页算法与编程之美谈一谈|编程中的数学思维

谈一谈|编程中的数学思维

数学思维:

在个人的理解中,大多数编程题都有数学的影子(离散数学中的图、树归到数据结构),还有一些题目仅用数学方法就可以解出答案。下题《最大降水量》就属于其中。

问题描述

由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。这个法术需要用到他手中的49张法术符,上面分别写着1至49这49个数字。法术一共持续7周,每天小明都要使用一张法术符,法术符不能重复使用。每周,小明施展法术产生的能量为这周7张法术符上数字的中位数。法术施展完7周后,求雨将获得成功,降雨量为7周能量的中位数。由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

1.1问题分析

题目言简意赅,即49个数字均分成7组,每组以其中位数为该组的值,而又以7组的中位数为最终的降雨量值。

1.2思路分析

图3.1 降雨量假定分配表

由题可知,最后降雨量关键在‘中位数’。如图3.1所示:关键在于各天的中位数集合——红色一列以及红色列的中位数——绿色。为了使红色列的数值尽量高,将较小的数(1到21)尽量排在红色列下方;又为了使绿值尽量高,再将较小的数(22到33)排在绿值所在——星期四这列的左方。最终还剩16个数(34到49)排在斜线区域。而绿值无论是行、还是列,均是最小的数。即最终降雨量是16个数中最小的数——34。

2.数学思维的特点

数学思维在解决问题时,不局限于问题的结果与严密的逻辑格式,而是充满了创造性、抽象性。

2.1 创造性

我们对待编程应该用挑剔的眼光看待,“好程序不是编出来,是不断重构出来的”,因此创造力是编程的成长条件,更是一种满足与享受。可能没啥比自己写的代码成功解决问题后的快乐更让人沉醉。‘大道至简’,代码的干净也只有不断重构、创造,才能实现。

2.2 抽象性

常规的初级程序对数学的需求不是很大,更侧重于各种熟知框架基础(循环、条件)的理解与运用。

但对于算法来说,数学的抽象性对其十分重要。算法是需要从不同的的代码逻辑中抽象出解决问题的框架,也就是设计框架。设计框架是从更大的格局来看待这个问题,使问题由大变小,因此对一些复杂问题作用显著。

3.数学思维表现

在求1到100的偶数时,常规方法遍历求和。但如果是数学题,我们可能会用等差公式。两者并无高低之分,前者是将人们大脑中的本能运算思路具象化——通过语言表达;后者是运用普遍规律。因此前者更具有结构性、逻辑性,但后者毫无疑问更简单。

结语

上面着重论述的抽象性与创造性,并不表示否认逻辑性的重要。而是因为逻辑性对编程的重要性广为人知,没有论述必要。编程初级阶段对数学思维要求低,但随着算法等抽象事物的学习,要求必然会提高。因此若要追求更高的编程境界,树立数学思维必不可少。

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:梁林

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python|前后端分离开发-学习路线及资料

    人生苦短,我用python。python开发web项目在以前总是因为其运行效率低下而受到诟病,但随着硬件设备性能的不断提升,间接弥补了这一缺点。并且因为pyth...

    算法与编程之美
  • 聊一聊少儿编程

    1984年,邓小平的一句话开启了中国计算机的新篇章“计算机普及要从娃娃抓起”。而且在2017年浙江省就明确表明,Python将纳入浙江省的的高考。如果说这离我们...

    算法与编程之美
  • python|typing模块的介绍

    首先由于python的特性,很多情况下我们并不用去声明它的类型,我们实际上并不知道传入的一个参数或输出值的类型。如下

    算法与编程之美
  • C语言#和##连接符在项目中的应用(漂亮)

    这个老外实现的是一个环形缓冲,然而他巧妙的将ring这个字串去掉,最后阅读代码看到的是非常整齐的:

    morixinguan
  • 字符串比较,居然暗藏玄机(没收获你锤我)

    public static boolean isEqual(byte[] a, byte[] b) {

    架构师之路
  • Spring Cloud 之 Gateway.

    Zuul 基于servlet 2.5 (works with 3.x),使用阻塞API。它不支持任何长期的连接,如websocket。

    JMCui
  • kali常用Ddos攻击教程《附脚本》

    ICMP Echo Flood # 使用hping3启动针对目标的传统ICMP Echo洪水 

    周俊辉
  • Python 学习入门(30)—— 多态

    多态性允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent~Child,多态性使得能够利用同一类(基类)类型的指针来引用不同类(子类)的对象,...

    阳光岛主
  • Python编程技巧06-如何获取两个集合的并集

    昨天发布信息后,朋友问我为什么不一次,多分享一些编程技巧。我说要克制,少即是多。每天分享一个编程技巧,如何能够掌握。能坚持学下去,一年365天,不费吹灰之力,就...

    TalkPython
  • Linux信号基础

    Linux进程基础一文中已经提到,Linux以进程为单位来执行程序。我们可以将计算机看作一个大楼,内核(kernel)是大楼的管理员,进程是大楼的房客。每个进程...

    Vamei

扫码关注云+社区

领取腾讯云代金券