死磕-算法(一)

简介: 死磕-算法(一)

一、为什么我要写算法呢?

1、我认为算法与数据结构是写好程序的一门很重要的技术点,当你真正了解一个程序的逻辑,但是如何去优化你的代码可能与算法也是有关系的,在我的理解当中是这样的。

2、因为我3月份到4月份一直在面试各种大厂,包括,阿里,腾讯,百度,携程的一些大厂,还有一些独角兽公司,都涉及到了算法,因为算法一点没有准备,被PASS了,所以系统学习下算法,然后刷题,为大厂做准备。

二、算法与程序的区别

1、算法就是计算或者解决问题的步骤,我们可以把它想象成食谱,要想做出好吃的食品,就要遵循食谱上面的步骤,同理,要想用计算机解决特定的问题,就要遵循算法。

2、食谱和算法的区别在于算法是严密的。食谱只是会有描述不清楚模糊的部分,而算法都是用数学方式来描述的,很明确。

3、算法和程序很相似,但是程序是以计算机能够理解的编程语言来编写的,可以在计算机上运行。而算法是以人类能够理解的方式描述的,用于在编写程序之前。

4、但是从哪里到哪里为主是算法, 从哪里开始是程序,并没有明确的界限。

5、就算使用同一个算法,编程语言不同,写出来的程序也不同;即使使用相同的编程语言,写程序的人不同,那么写出来的程序也会不同的。

三、排列整数的算法:排序

1)、查找最小的数字并排序:选择排序

上面的是一个以随意排列的整数的输入,把它们从小到大重新排列的问题。上面的这个虽然输入的整数的个数n为8,但是算法是不管n多大,算法都会将问题解决。

2)、首先想到的办法是:先从输入的数字中找出最小的数字,再将它和最左边的数字交换位置呢?然后会将它和最左边的7交换位置:

3)、这之后1的位置确定下来之后,不再移动,接下来。在剩下的数字里继续寻找最小的数字,再将它和左边的第二个数字交换位置。于是,4和13也就交换了位置。

4)、我们可以将这样的一次交换称为“1轮”,到了第N轮的时候,就把剩下的数字中最小的一个,与左边开始第N个数字进行交换。于是在结束第N轮后,从左数的第N个数字便都是按照从小到大的顺序排列了。

5)、只要重新n多次,那么所有的数字都将会按照从小到大的顺序排列。

这里只是举个例子。后续会给介绍选择排序的算法来解答这道题。

四、用计算机能理解的方式构思解法:算法的设计

1、用计算机擅长高速执行的一些基本命令,但是无法执行复杂的命令。

2、基本命令:做加法或者在指定的内存地址上保存数据等。

3、计算机是以这些基本命令的组合为基础运行的。面对复杂的操作,也是通过搭配组合这些基本命令来应对的。

4、上面的算法的题也是如何搭配组合计算机可以执行的那些基本命令来实现这个操作。

五、如何选择算法

1、能解决的排序问题的算法不止这一个,那么,当有多个算法都可以解决同一个问题的时候,我们该如何去选择?在算法的评估上,考量的标准也各有不同。

2、比如,简单的算法对人类来说易于理解,也容易被写成程序,而在运行过程中不需要耗费太多空间资源的算法,就十分适用于内存小的计算机。

3、不过,一般来说我们最为重视的是算法的运行时间,即从输入数据到输出结果的这个过程所耗费的时间。

好吧,今天就到这了,明天见~~

相关文章
|
JSON JavaScript 前端开发
继续死磕前端
继续死磕前端
|
2月前
|
Java
死磕-java并发编程技术(二)
死磕-java并发编程技术(二)
|
2月前
|
存储 Java 调度
死磕-java并发编程技术(一)
死磕-java并发编程技术(一)
|
存储 Oracle 安全
你背的“八股文”可能已经过时了
随着技术的不断更新迭代,一些曾经被认为是“标准答案”的观点和方法,已经不再适应当前的需求,甚至被视为过时的做法。在新的JDK版本中,许多新的特性、工具和方法被引入,使得Java编程变得更加简洁、高效和强大。所以,是时候对“八股文”进行一次知识库的清理和更新了。
|
前端开发 JavaScript 安全
全程无尿点,死磕前端~
全程无尿点,死磕前端~
|
存储 Web App开发 程序员
程序猿的血泪史:一定要有数据备份的思想,不然死都不知道咋死的!!!
程序猿的血泪史:一定要有数据备份的思想,不然死都不知道咋死的!!!
207 0
|
设计模式 架构师 Java
为什么有些蛮厉害的人,后来都不咋样了
写这篇文章目的是之前在一篇文章中谈到,我实习那会有个老哥很牛皮,业务能力嘎嘎厉害,但是后面发展一般般,这引起我的思考,最近有个同事发了篇腾讯pcg的同学关于review 相关的文章,里面也谈到架构师的层次,也再次引起我关于架构师的相关思考,接下来我们展开聊聊吧~
157 0
|
Java 数据库连接 数据库
信不信十分钟让你彻底搞懂java反射
概念:反射是Java的一种机制,让我们可以在运行时获取类的信息 作用:通过反射,我们可以在程序运行时动态创建对象,还能获取到类的所有信息,比如它的属性、构造器、方法、注解等;
18103 2
信不信十分钟让你彻底搞懂java反射
|
存储 编译器
懂了嘎嘎乱杀,但我赌你会懵——指针进阶终极版
正片开始👀 细化指针这一部分内容,现在着重把一些指针的运用情景搬出来康康,如果对指针盘的非常熟练了,或者指针还出于入门阶段的铁子请绕道(晕头警告) 直接给大家盘个套餐: 一维数组👏
懂了嘎嘎乱杀,但我赌你会懵——指针进阶终极版
|
程序员
我想到的几句话。
1、OO是好用的,问题是好多人用不好OO。(包括我在内) 2、三层是需要设计的,不是说把原来写在一处的代码,分开写在三处,就是三层了。 3、设计模式是需要灵活掌握的,外加丰富的项目经验和对业务逻辑的深刻理解。
598 0