算法之我见(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.基础函数和高级函数的使用

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容