当前位置: 首页 > news >正文

数学-算法

一、数学算法

1、高斯算法

    以首项加末项乘以项数除以2来计算“1+2+3+4+5+···+(n-1)+n”的结果。这样的算法被称为高斯算法。

算法由来

    高斯小时候非常淘气,一次数学课上,老师为了让他们安静下来,给他们列了一道很难的算式,让他们一个小时内算出1+2+3+4+5+6+……+100的得数。全班只有高斯用了不到20分钟给出了答案,因为他想到了用(1+100)+(2+99)+(3+98)……+(50+51)……一共有50个101,所以50×101就是1加到一百的得数。后来人们把这种简便算法称作高斯算法。

计算方法

求结果
结果的计算方法: (首项 + 末项)* 项数 / 2
例1:1+2+3+4+5+······+10,公式为:(1+10) * 10 / 2 = 55
例2:1+2+3+4+5+······+100,公式为:(1+100) * 100 / 2 = 5050
例3:2+4+6+8+······+20,公式为:(2+20) * 10 / 2 = 110
例4:1+2+3+4+5+······+n,公式为:(1+n) *n / 2
例5:2+4+6+8+10+······+n,公式为:(2+n) * [(n-2)/2+1] / 2

求项数
项数的计算方法:(末项 - 首项) / 项差 + 1
项差: 每项之间的差。例:1+2+3+4+5+······,项差为1
例1:1+2+3+4+······+10,项数为:(10-1) / 1+1 = 10
例2:4+8+12+16+······+28,项数为:(28-4) / 4+1 = 7

人物介绍

    约翰·卡尔·弗里德里希·高斯(Johann Carl Friedrich Gauss ,1777年4月30日-1855年2月23日)德国著名数学家、物理学家、天文学家、大地测量学家,是近代数学奠基者之一,被认为是历史上最重要的数学家之一,并享有“数学王子”之称。
    高斯和阿基米德、牛顿并列为世界三大数学家。一生成就极为丰硕,以他名字“高斯”命名的成果达110个,属数学家中之最。他对数论、代数、统计、分析、微分几何、大地测量学、地球物理学、力学、静电学、天文学、矩阵理论和光学皆有贡献。

2、等差数列求和

    一般地,如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列称为等差数列,这个常数称为等差数列的公差,用字母d表示,等差数列的首项用a1表示。一般地,Sn=a1+a2+a3+…+an,我们称Sn为数列{an}的前n项和,等差数列的前n项和的求和公式为Sn=n(a1+an)/2,也可以表示为Sn=na1+n(n-1)d/2。

公式

对于等差数列,前n项的和的求和公式为:

推导

倒序相加法

    高斯10岁时,他的算术老师出了一道题目,求1+2+3+…+100的结果,高斯给出了一种巧妙的解法:1+2+3+…+100=(1+100)+(2+99)+…+(50+51)=101×50=5050. 将这个算法推广到公差为d的任意等差数列{an}中,就可以得到等差数列的求和公式。

    /*** 等差数列求和** @param a1:开始项* @param d:公差* @param n:项数* @return*/private static int arithmeticSeriesSum(int a1, int d, int n) {return (a1 + a1 + (n - 1) * d) * n / 2;}

2829. k-avoiding 数组的最小总和 - 力扣(LeetCode)

//贪心 + 等差数列求和// 根据题目要求,在k是奇数的情况下,如果某个正整数a在数组中,那么k-a肯定不能在数组中。// 反过来也一样。但是题目要求总和最小,因此我们肯定是将这两个数字中小的放入数组,// 并且从1开始挑选数字放入数组,直到k/2为止。这之后的数字到k-1为止,都不能放入数组。// 如果这时数字还没到到达n个,我们需要从k开始,再挑选连续的 k−k/2个数字加入数组。因此最后的数组和是一段或者两段等差数列求和。public static int minimumSum(int n, int k) {if (n <= k / 2) {return arithmeticSeriesSum(1, 1, n);} else {return arithmeticSeriesSum(1, 1, k / 2) + arithmeticSeriesSum(k, 1, n - k / 2);}}/*** 等差数列求和** @param a1:开始项* @param d:公差* @param n:项数* @return*/private static int arithmeticSeriesSum(int a1, int d, int n) {return (a1 + a1 + (n - 1) * d) * n / 2;}

数据结构和算法(一)

再小的努力,乘以365都很明显!
每天⽤⼼记录⼀点点。内容也许不重要,但习惯很重要!
一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!


http://www.mrgr.cn/news/96127.html

相关文章:

  • Unity-RectTransform设置UI width
  • 生成模型速通(Diffusion,VAE,GAN)
  • 【更新中】【React】基础版React + Redux实现教程,自定义redux库和react-redux库
  • Mac 常用命令
  • @Resource 与 @Autowired:Spring 中的依赖注入注解大比拼
  • 前端全局编程和模块化编程
  • Android面试之基础算法总结
  • 01 设计模式和设计原则
  • MyBatis-Plus(SpringBoot版)学习第一讲:简介入门案例
  • vue vue3 走马灯Carousel
  • 高性能 Android 自定义 View:数据渲染与事件分发的双重优化
  • QT三 自定义控件,自定义控件的事件处理自定义事件过滤,原始事件过滤
  • 自动化测试selenium(Java版)
  • Java基础关键_029_线程(二)
  • Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出
  • linux - centos7 部署 redis6.0.5
  • Echarts使用
  • 字节跳动前端开发实习生面试总结
  • 蓝桥杯高频考点——二分(含C++源码)
  • QT自运行程序