算法之我见(I)

1.算法如何认知

初学算法是建立在数据结构的基础上的,然后基本就是利用一堆数据结构来解决给定的数据题。虽然当时学的还不错,但并不能使我都算法有更深入的认知和记忆,无法真正理解的东西就无法融入血液成为自己的一部分。
算法其实是一种解决方案,针对某个和计算机抽象逻辑相关问题的解决方案。算法是在给定的条件限制下的解决方案,确切而言,一般而言,我认为的算法,是比较好的那种,差的那种不能算,因为会被淘汰,我们要做的就是优化某个解决方案,可能不能一次优化完毕,那么就是逐步优化,否则等待的就是方案或者问题被淘汰的命运。
具体的限制条件,从硬件角度而言,可能会是计算的时间,内存,从网络上来看,可能就是安全性,准确率,可同时容纳的访问量。
既然我们知道,算法是一种特定环境下,针对计算机抽象逻辑的解决方案,那我们接下来就进一步聊聊,如何设计解决方案和使用工具了,不过首先我们得聊一下我们的工作环境(当然,算法也可以扩展为非计算机环境下的问题,这个扩展不在这里讨论,我们这里以如何用计算机的结构来解决计算机的抽象逻辑问题)

2.算法的工作环境

这个没有悬念,我们通篇聊的是计算机,那么算法的工作环境就是计算机了。但是计算机是01组成的硬件,怎么用呢。这个不用我们操心了,先辈们已经发明了操作系统,底层语言,上层语言(一般上层是在底层的基础上打包来提供一些提层语言不提供的接口功能),我们的算法基本是在特定操作系统下,使用特定语言编写出可以使用的工具在通用或者定向的平台上运行。
看起来,不同的操作系统,不同的语言,这个真让人头大。不过不用担心,算法是高于这些的,同一种算法可以在不同的语言,不同的操作系统下运行。只是你需要知道的是,如何用该种语言顺利写出你的算法逻辑即可。
既然我们知道,算法的工作环境是计算机,而具体的实现使用一种或多种语言,那么,我们接下来讲的就是计算机语言咯。

3.计算机语言

计算机语言有很多中,我所知道的就有,c,c++,c#,python,java,javascript,powershell,matlab等,当然,其实不同语言有一定的针对性,例如c就比较偏向底层硬件,因为提供的功能和类型,逻辑也都比较简单,C++会C多一个类的结构,更偏向于上层的对象抽象,C#就更偏向上层一些,界面等实现和通信起来也比较方便,powershell,javascript就属于脚本语言,matlab科学计算方面的支持的多些。python这个,感觉啥都有,你想要哪块选哪块,不过性能上面和支持的广度没有相同方向的C类的好就是了。当然还有一些针对专有移动平台的语言,如object-C,是C的一种变体。
基本上讲,看需求:

  • 如果你的问题更偏底层,那么用偏底层的语言。
  • 如果你的问题需要快速的界面和逻辑实现,那么用上层语言会实现起来比较方便(因为已经帮你实现好了一些功能,只需要调用即可),
  • 如果你的问题只是需要分析数据不是特别在意界面和时间效率的话,matlab或者python的某些库可以满足你的需求,数据统计图展示,这两者都有相关的支持。
  • 如果你的问题只是一个过程性的(比如说书上的算法题),不需要考虑平台和界面,那么,选择一个你用的熟悉的即可。

现在,假设,我们知道了我们要解决的问题,也知道我们要选用的语言,可是,我对语言不熟,或者说,我有短时间没用那种语言,有点生疏了,不是不会,而是一时展现表达不出来,怎么办?
接下来,我们就讲讲,如何快速的掌握一种语言。

4.如何快速掌握一种计算机语言

我们要掌握一种计算机语言,基本要掌握的就是这三个方面。
1.各种变量的类型,运算,赋值和打印
2.流程控制
3.基础函数和高级函数的使用

1.变量

基础变量类型有,整型,浮点型,字符,数组,高级点的还有结构体,类,接口等。了解这些类型的赋值,运算,比较,打印等单层或者多层的嵌套实现。

2.流程控制

一般计算机语言的流程控制语句也就这三类:

  • 顺序:从上往下,依次执行
  • 条件:按照不同的选择,执行不同的代码
  • 循环:执行相同的代码逻辑
    其中顺序是基本流程,只要我们不添加其他流程控制语句,我们的代码都是从上往下依次执行的。
    条件是根据不同的条件判断执行不同的代码块。如if elif else,switch case default。一般用于根据不同的条件来执行数据处理。
    循环是根据一定的长度或者条件来执行重复执行相同的代码块,如for ,while。一般用于批量处理连续的数据
3.基础函数和高级函数的使用

每种语言都会提供一些基础函数和高级函数,基础函数是你自己无法用该语言实现的因为偏向硬件底层,有些高级函数是可以用该语言实现的,不过一般情况下,你实现的效率不如给定的函数效率高,这个除了算法的逻辑问题,还有底层实现问题。
善用给定的函数接口很重要,这是你写好算法的基础,有些时候,你可能知道如何实现,但是纠结在某个不重要的小点,但这一点其实已经有实现好的函数可以用,这就不好了。

假设,我们已经会了某个语言的基础用法,但是,好像和会使用算法还是有距离,怎么办?别急,其实,到这一步,你应该会用程序来解决你很多的问题了。毕竟不是所有解决方案都需要算法,算法是一种解决方案,但解决方案不全是算法。
算法其实在数据比较大,对空间和时间有要求的时候,才会体现出其价值,很多时候,小数据的时候,能实现就可以了,都到不了用算法的程度。假设,我们对时间和空间有要求,我们怎么来思考用算法呢?
算法一般是针对某种数据结构的,没有所谓的通用算法,针对不同问题,我们采用的数据结构,根据不同数据结构我们使用的算法也不同。接下来我们讲讲数据结构和算法的关系和应用。
(请待下一篇)

你可能感兴趣的:(算法之我见(I))