死磕-算法(一)

简介: 死磕-算法(一)

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

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并发编程技术(二)
|
2天前
|
程序员
死磕-汇编语言(一)
死磕-汇编语言(一)
|
前端开发 JavaScript 安全
全程无尿点,死磕前端~
全程无尿点,死磕前端~
面试又被问懵了吗?不如把ThreadLocal拆开了揉碎看看
1.为什么用 ThreadLocal? 所谓并发,就是有限资源需要应对远超资源的访问。解决问题的方法,要么增加资源应对访问;要么增加资源的利用率。 所以,相信这年头做开发的多多少少,都会那么几个“线程二三招”、“用锁五六式”。 那所带来的就是多线程访问下的并发安全问题。 共享变量的访问域跨越了原始的单线程,进入了千家万户的线程眼里。谁都可以用,谁都可以改,那不就打起来了吗? 因此,防止并发问题的最好办法,就是不要多线程访问(这科技水平倒退二十年~)。ThreadLocal 顾名思义,将一个变量限制为“线程封闭”:对象只被一个线程持有、访问、修改。
不要累死自己,也不要卷死别人。
不要累死自己,也不要卷死别人。
86 0
|
存储 Web App开发 程序员
程序猿的血泪史:一定要有数据备份的思想,不然死都不知道咋死的!!!
程序猿的血泪史:一定要有数据备份的思想,不然死都不知道咋死的!!!
192 0
|
存储 编译器
懂了嘎嘎乱杀,但我赌你会懵——指针进阶终极版
正片开始👀 细化指针这一部分内容,现在着重把一些指针的运用情景搬出来康康,如果对指针盘的非常熟练了,或者指针还出于入门阶段的铁子请绕道(晕头警告) 直接给大家盘个套餐: 一维数组👏
懂了嘎嘎乱杀,但我赌你会懵——指针进阶终极版