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

简介: 谈一谈|编程中的数学思维

数学思维:

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

问题描述

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

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

1.1问题分析

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

1.2思路分析

3.1 降雨量假定分配表

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


2.数学思维的特点

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

2.1 创造性

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

2.2 抽象性

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

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


3.数学思维表现

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

结语

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

目录
相关文章
|
存储 缓存 监控
增值电信许可证分类
增值电信业务许可证的全称是“中华人民共和国电信与信息服务业务经营许可证”,是通过互联网向上网用户提供有偿信息、网上广告、代制作网页、电子商务及其它网上应用服务的公司必须办理的网络经营许可证 ,国家对经营性网站实行增值电信业务许可许可证制度。
855 0
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
12月前
|
人工智能 前端开发 JavaScript
【CodeBuddy】三分钟开发一个实用小功能之:CSS渐变背景生成器
这是一个由AI生成的完整CSS渐变生成器项目,具备可视化交互、实时预览和代码生成功能。通过HTML、CSS和JavaScript实现,支持线性与径向渐变,提供随机生成和复制代码功能。项目展示了AI编程助手在快速原型开发、教学辅助和设计系统集成中的应用价值。其智能上下文感知、全链路代码生成和决策能力,为开发者提供了高效工具支持,助力从样板代码中解放创造力。附带优化方向如增强渐变类型、智能推荐系统及工程化改进,进一步拓展了应用场景。
267 2
【CodeBuddy】三分钟开发一个实用小功能之:CSS渐变背景生成器
|
11月前
|
XML 前端开发 JavaScript
2025 年最新 CSS 面试题 100 道及详细答案解析
本文整理了100道CSS面试题及答案,涵盖基础概念、选择器与特性、布局(如Flexbox和Grid)、动画与过渡、响应式设计等核心内容。从CSS的基础知识如盒模型、`box-sizing`属性,到高级应用如伪类选择器(LVHA、CSS3新增伪类)和视觉格式化模型(BFC),帮助开发者系统掌握CSS技能。此外,还涉及浏览器兼容性、CSS优化及预处理器等内容,为前端工程师提供全面的学习资源。资源可从[此链接](https://pan.quark.cn/s/50438c9ee7c0)获取。
785 5
|
编译器 C语言 C++
NumPy 1.26 中文官方指南(三)(2)
NumPy 1.26 中文官方指南(三)
738 1
|
存储 前端开发 Java
若依修改----数据字典,可以用于维护系统中常见的静态数据,为什么不写死,用字典维护?数据字典的好处是一个地方编写数据,在多个地方,复用他,静态选项这里填完,换其他,用户性别这里的男女,就转成而来字典
若依修改----数据字典,可以用于维护系统中常见的静态数据,为什么不写死,用字典维护?数据字典的好处是一个地方编写数据,在多个地方,复用他,静态选项这里填完,换其他,用户性别这里的男女,就转成而来字典
|
存储 缓存
解决Gradle: Connection timed out问题
解决Gradle: Connection timed out问题
6478 0
|
API 计算机视觉 开发者
【Python】已解决:(pip安装PIL库报错) ERROR: Could not find a version that satisfies the requirement PIL (from v
【Python】已解决:(pip安装PIL库报错) ERROR: Could not find a version that satisfies the requirement PIL (from v
2953 0
|
存储 缓存 算法
Linux内存管理笔记----TLB
Linux内存管理笔记----TLB
2377 0