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

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

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

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

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自己的见解,为算法和数据结构多做出一种解释,编程最重要的就是思想碰撞,希望对大家理解算法与数据结构有帮助!

算法与数据结构(面向对象思想)相关推荐

  1. 由任意二叉树的前序遍历序列和中序遍历序列求二叉树的思想方法_算法与数据结构基础 - 二叉树(Binary Tree)...

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

  2. python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单

    推荐一下「算法与数据结构」从入门到进阶的书单. 一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现, ...

  3. c语言紧凑算法的内存分配,C语言(第二章.1)算法与数据结构A.ppt

    C语言课件(第二章.1)算法与数据结构A资料 课程设置目的 本课程是非计算机专业学生的技术基础课,通过本课程的学习,应使学生掌握传统的结构化程序设计的一般方法,以C为语言基础,培养学生严谨的程序设计思 ...

  4. 「算法与数据结构」从入门到进阶吐血整理推荐书单

    一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现,但是看过以下这些书对于之后实现算法打下坚实的思维 ...

  5. 面向对象思想-谈谈建筑电气设计的思想

    面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分.这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象:对象是属性及其操作的封装体:对象可按其性质划分为类,对象成为类的实例:实例关 ...

  6. 考研复试 算法设计数据结构

    算法的基本概念和特性 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作. 算法的五个特性: 输入: 算法具有0个或多个输入 输出: 算法至少有1个或多个输出 有 ...

  7. python面向对象类创建人物类包含姓名、职业_Python面向对象思想与应用入门教程【类与对象】...

    本文实例讲述了Python面向对象思想与应用.分享给大家供大家参考,具体如下: 面向对象思想 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在 ...

  8. 关于面试中谈谈你对面向对象思想的认知的小结

    关于面向对象思想,想必在面试中被问到是家常便饭的事,今天结合自己的体会(虽然工作一年没怎么写过C++),和借助于互联网信息,对较好的观点进行了汇总(大神可以绕道了,哈哈.).当然在提到面向对象思想的同 ...

  9. noj数据结构稀疏矩阵的加法十字链表_一个算法毁了一款好游戏?算法和数据结构到底有多重要?...

    来源 | 异步 | 文末赠书 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多 ...

最新文章

  1. Boolean值判断2个条件之后选择一个条件
  2. Spring Cloud微服务笔记(一)微服务与云概念
  3. 学计算机买笔记本是i5 i7,i7不一定比i5好!懂电脑的人选择买i5,而不是i7,究竟怎么回事?...
  4. C++之显示构造函数
  5. 【HTML5】Canvas画布
  6. SxSW小组成员讨论了Valley调查中的Elephant
  7. 心酸 | Bean复制的几种框架对比,看完心酸
  8. 手机modem开发(4)---高通QXDM抓modem log
  9. ArcGIS——vs2015安装arcgis engine不兼容
  10. 序列化和反序列化(json和pickle)day18
  11. Java学到什么程度可以面试工作?
  12. 微信小程序srt_微信小程序商城开发之实现商品加入购物车的功能(代码)
  13. 批量打印远端PDF文件
  14. 走近篮球运动·体育项目
  15. mysql my.cnf 字符集_my.cnf 中字符集设置
  16. python绘制动态图形_让Python绘制一套动态图形给你看看
  17. 遇到类似的问题,linux cp 参数过长问题---转载
  18. 怎么把exe转成手机的可执行文件
  19. 嵌入式软件工程师—成长笔记#01
  20. R pdf大小_限时免费获取 Mac上PDF压缩工具《Enolsoft PDF Compressor》

热门文章

  1. invalid value encountered in double_scalars
  2. OpenCV2和3的下载、安装和配置
  3. Cissp-【第5章 身份与访问管理】-2021-3-14(601页-660页)
  4. parquet to mysql_在hive中使用parquet (CDH4.3)
  5. java 报表导出_Java Excel报表导出Demo
  6. jmeter提取多个变量的多个值_jmeter用一个正则提取器提取多个值的两种方法
  7. nginx 图片站点加访问权_nginx配置访问图片路径以及html静态页面的调取方
  8. c语言c2182是什么错误,C语言中一种更优雅的异常处理机制
  9. python实现逻辑回归的流程_逻辑回归原理及其python实现
  10. vscode设置eslint检验无效_大整理!JavaScript开发者的27个神奇VSCode工具