算法与数据结构(面向对象思想)

算法与数据结构和编程之间关系

计算机就是算法与数据结构,

当你选择搜索这类的文章的时候,你已经在翻大山了

编程就是当你翻过一座山的时候,你发现前面还有一座更高的山.

 

LZ从事java工作一年了,最近听见同事之间在讨论这个东西,说东说西的都有,我就以我一年来的开发经验尝试着去说一说算法和数据结构与编程的奇妙关系.

比较官方的说法就是(来自百度):

算法:   

        算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入.

数据结构:  

       数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常 情况下,精心选择的数据结构可以带来更高的运行或者存储效率.

 

有些新学习编程的小伙伴肯定会蒙圈,特别是对数学不好的,像我就是数学学渣,那么下面请跟着学渣的视角进入编程的世界,

先说数据结构,毕竟算法也得有东西算,才又算法,所谓先有鸡后有蛋,数据结构,既然是结构,里面肯定是有不同的数据的,对我而言,与其叫数据结构,不如叫数据流,数据流中包含了各种数据,数据结构构成流,流亦是数据结构,面向对象就是,万物皆数据,以流的形式呈现.

首先要想明确数据流最重要就是两个词

数据: 单个元素,也可以是数据流,

数据流,: 多种数据融合在一起

 

比如LZ举个例子,我们尽量一个现实的物体来描述,并且数据流很小的,比如一盒香烟,把香烟比作数据流,它的数据结构既是纸,烟草,再细分构成纸数据流的又是树皮,水,木浆,数据流中包含数据流,每一种元素细分都是一种数据流.在大的数据流面前,小的数据流又变成了大数据流的数据,呈现的形式就一包香烟.

再比较大的,例如一栋大楼,从数据分析,表面上看它是由墙壁,砖头,钢材等多种数据,这着数据又是数据流,因为墙壁又包含了多种数据,水泥,瓷砖,各种数据组合在一起就形成了一栋大厦;

一个好的数据结构, 可以省略很多算法, 比如现在有一个需求, 在首页显示最新好友, 还可以查看历史好友, 每天最多邀请5位好友,邀请好友奖励赠送奖励, 五个以后就不赠送;1, 第一次设计是一个map结构, key是一个时间戳 yyyy-MM-dd  value是一个Arraylist, 每次添加好友时, 拿到当前时间戳, 然后去好友map中去取这个key, 再判断value的长度是否达到了5个长度, 否则就不进行赠送了, 现在好友列表有了,是一个map结构, 但是我要从这个结构里面拿出来最新的五个好友就有点困难了, 我需要拿到所有的key, 判断哪个key, 距离当前的时间最近, 然后再取得value, value是一个Arraylist, 再判断这个集合里面谁在这一天中谁前谁后,  在取最新的好友的过程中, 用了很多算法, 不方便,  后来升级了成一个LinkedList, 新添加的在前面, 后添加的在后面,把长度控制在五个, 长度超过五个了就不赠送奖励, 但我需要获取最新的好友列表时, 直接把这个结构拿出来就行了, 不用进行任何其他的从操作, 提升了, 程序运行效率.

 

现在就可以说算法了

有人说算法和函数不一样

算法是自己写的,函数是用来调用的

那什么样的人才是写算法的呢,现在的编程语言,谁不用API,都是在用之前的人写的代码,加之自己的分支,循环,判断,得到一种结果,那别人的代码也是建立在别人的别人的代码之上写的,那恐怕只有发明计算机的人才是写算法的人了,

 

LZ认为,传入多个参数,输出多个参数和结果,这个过程就叫算法和函数,算法=函数.

回到之前举的例子,一栋大楼,虽然是由各种数据构成的,但是数据都是散开的,数据无法自己聚合在一起,形成数据流,

不会自己变成我们想要的结果,

而算法就是中间的粘合剂,中间关口,它决定传入的参数,对数据流进行,改修,留下需要的,抛弃不需要的,将数据和其他数据组成在一起,形成数据流,将数据流和数据流组成在一起,形成新的数据流,将数据流拆分成数据,再聚合,这就是算法的作用,现在的人不都是喜欢讲灵魂吗? 算法就是数据流的灵魂,没有算法的数据实时没有灵魂的,

 

所有编程的人员的,不论哪种语言,第一个案例应该都是"你好 世界",LZ这里以JAVA为例,”

System.out.println(“Hello world”);

这就是将数据原样输出到控制台,当然避开jdk内部的算法,安全检查,编译成字节码文件再由虚拟机运行,发送给CPU执行指令

 

再写一个带算法的,不用多高深

int a = 10;

if(a < 9){

System.out.println(a);

}

 

我们定义了参数,但是我们有选择权不输出,就是算法,单纯的数据没有算法进行改造没有太大意义的

 

现在的web应用比如说一个去某宝上面选择一个商品加入购物车,你选择的商品,你的账户信息,等各种信息以数据流的形式到服务器,服务器通过算法,检查数据流的安全性,从数据流获取想要的数据,决定哪些数据需要保存起来,将数据经过重构,考虑是否需要返回给你,再已新的数据流的形式返回给你,客户端获取数据流,在通过算法,聚合数据流,包装数据流,呈现出视图,就是你看见的商品已经再购物车的效果了

 

此文章不做任何标准,只代表LZ自己的见解,为算法和数据结构多做出一种解释,编程最重要的就是思想碰撞,希望对大家理解算法与数据结构有帮助!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值