数据结构与算法是什么,什么是数据结构?什么是算法?算法与程序有什么关系?
数据结构与算法是什么,什么是数据结构?什么是算法?算法与程序有什么关系?详细介绍
本文目录一览: 数据结构与算法(Data structure and Algorithm)
数据结构是数据对象在计算机中的组织方式和及加在其上的一系列操作的总称。
完成这些操作所用的方法就是算法。
算法(Algorithm):一个有限指令集、接受一些输入、产生一些输出、在有限的步骤之后终止,并且每一条指令应该是有明确的目标、无歧义,在计算机能处理的范围。
解决问题方法的效率与数据的组织形式,空间的利用率,算法的巧妙程度有关。
n是变量,是问题规模的意思。
空间复杂度S(n) :占用存储单元的长度,递归:S(n) = C*N
时间复杂度T(n):消耗时间的长度,递归:T(n)= n
最坏复杂度,平均复杂度
渐进表示法:
好的算法是空间复杂度,时间复杂度都在合理范围。
什么是数据结构和算法
算法就是计算机处理解决问题的计算机能理解的方法。
比如算一个阶乘 , 计算机的算法就是写一个循环,从高到底, 一直乘下去,直到 1 为止。
复杂的算法比如一个强连通带权网络,求两点间的最短路径,这个很有用啊....比如采用广度优先算法,或深度优先算法
数据结构指数据在计算机中存储存在的方式。
比如文件在硬盘中,有二进制,文本等形式存放, 程序中的一组数字可能放在数组里面,也可能在栈里面,也肯能在链表里面
01 - 数据结构和算法的认识
了解数据结构和算法的一些基本概念,主要掌握时间复杂度的计算
数据结构是指所有数据元素以及数据元素之间的关系,可以看做是相互之间存在着某种特定关系的数据元素的集合,即可以把数据结构看成是 带结构的数据元素的集合 。
数据的逻辑结构是从逻辑关系上描述数据的,常常将数据的逻辑结构简称为数据结构。
集合:
树形结构:
图形结构:
逻辑结构在计算机中的存储方式。依赖于计算机语言
顺序存储结构:
链式存储结构:
索引存储结构:
散列(哈希)存储结构:
数据类型是一组性质相同的值的集合和定义在此集合上的一组操作的总称,数据类型是数据结构在计算机的具体体现。
注意:
算法是对特定问题求解步骤的一种描述
特性: 有穷性、确定性、可行性、有输入、有输出
算法设计好后,还需要分析算法的优劣,从两方面考虑
一个算法由控制结构和原操作构成,算法的运算时间取决于两者的综合效果,算法执行时间大致为基本运算时所需时间与运行次数的乘积。因此一个算法的执行效率可以由其最基本的运算的执行次数来衡量。
计算公式: T(n)=O(f(n))
说明:
注意: O 的作用在于只求出T(n)的最高阶项,忽略低阶项和常数
O(1) 没有进行循环的算法中,基本运算次数与问题规模无关,所以是常数
对数阶 O(log2n) 次数为x,而2的x次方等于n,那么就是对数阶
线性阶 O(n) 只有一层循环
平方阶 O(n^2)
立方阶 O(n^3) 三层循环,肯定就是n^3了
排序: O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3)
<o(2^n) < o(n!) o(n^n)
也叫加权平均时间复杂度,将执行的概率也加入计算。
是一种特殊的加权平均时间复杂度,把耗时多的操作分摊到耗时低的操作。
这个时间复杂度 其实是O(1),而不是O(n)
算法空间复杂度是指计算算法所需的存储空间, 其计算公式为S(n) = n(f(n)) 所以在考察算法的空间复杂度,主要考虑算法执行所需要的临时占用的存储空间大小的量度。
数组逆序,将一维v1.43数组a中的n个数逆序存放在原数组中.
复杂度计算:
说明:
什么是数据结构?什么是算法?算法与程序有什么关系?
数据结构就是计算机存储、组织数据的方式,它是人们为了实现各种各样的算法和程序而设计出来的,具有一定性质或规律。比如栈可以用来实现递归算法的非递归化,图可以用来处理网络问题。
算法你可以理解为用程序解决实际问题的方法。比如排序算法,查找算法。
程序就是基于某种或某几种数据结构,采用某种算法或某几种算法去解决问题的过程。
数据结构和算法是一回事么?
有这两门的课程视频建议你可以看看。
看看这个是否适合你,希望可以帮到你!
数据结构是计算机存储、组织数据的方式。
算法是指完成一个任务准确而完整的描述。也就是说给定初始状态或输入数据,经过计算机程序的有限次运算,能够得出所要求或期望的终止状态或输出数据。
楼上说的没错.
至于为什么数据结构和算法总是在一起出现,是因为它们两个构成了程序设计.
就是说:程序设计=数据结构设计+算法设计.
两门
数据结构是计算机存储、组织数据的方式。
算法是指完成一个任务准确而完整的描述。也就是说给定初始状态或输入数据,经过计算机程序的有限次运算,能够得出所要求或期望的终止状态或输出数据。
什么是数据结构?什么是算法?算法与程序有什么关系?
数据结构就是计算机存储、组织数据的方式,它是人们为了实现各种各样的算法和程序而设计出来的,具有一定性质或规律。比如栈可以用来实现递归算法的非递归化,图可以用来处理网络问题。
算法你可以理解为用程序解决实际问题的方法。比如排序算法,查找算法。
程序就是基于某种或某几种数据结构,采用某种算法或某几种算法去解决问题的过程。
相互之间存在一种或多种特定关系的数据元素的集合。(起始关于什么是数据结构,并没有严格的定义)
算法是对特定问题求解步骤的一般描述,是有限指令的集合。
程序=算法+数据结构(C语言)
拿华腾的交通卡系统做例子吧
先说数据结构:
程序里面有很多用户信息,这些信息是用结构体存放,是用链表的形式,还是用哈希表等等的方法进行排列,这个就是数据结构
算法:
要从这些数据结构里找出一个结点,是用遍历搜索呢还是用折半搜索之类的方法,叫做算法。
lz可以体会下。
数据结构与算法知识?
对于大多数的程序员来说,在学习数据分析等技术的时候需要先了解关于数据结构以及算法等知识点,下面我们就给大家简单介绍一下什么是数据结构?什么是算法?
大部分数据结构和算法教材,在开篇都会给这两个概念下一个明确的定义。但是,这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会让你陷入死抠定义的误区。毕竟,我们现在学习,并不是为了考试,所以,概念背得再牢,不会用也就没什么用。
虽然我们说没必要深挖严格的定义,但是这并不等于不需要理解概念。下面我就从广义和狭义两个层面,来帮你理解数据结构与算法这两个概念。
从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。按照一定规律编号,就是书籍这种“数据”的存储结构。
那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。笼统地说,这些查找方法都是算法。
从狭义上讲,也就是我们专栏要讲的,是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。这些都是前人智慧的结晶,我们可以直接拿来用。我们要讲的这些数据结构和算法,都是前人从很多实际操作场景中抽象出来的,经过非常多的求证和检验,可以高效地帮助我们解决很多实际的开发问题。
那数据结构和算法有什么关系呢?为什么大部分书都把这两个东西放到一块儿来讲呢?
这是因为,数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
比如,因为数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据。但如果IT培训选择链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。
数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。
什么是数据结构和算法?学算法还需要去了解数据结构吗?
数据结构与算法密不可分。
数据结构注重了数据的组织形式。 数据的一定的组织方式已决定了只适用于某此算法。
算法寻求在指定数据结构上的最优解, 也就是最有效率的方法。 为此也有此设计特定的数据结构的, 比如红黑树就是被发明出来的。
好的算法: 存储空间效率(数据结构)与时间效率(算法性能)达到一定的平衡, 而非只突出时间效率。 所以一定要同时考虑这两个方面才能设计出一个好的算法。
应用中还要考虑特定的环境, 比如嵌入式, 没有大的内存, 这时有些占用大量的内存的一些算法就不适用了。
另一种角度: 借用C++中STL的概念,
数据结构: 在C++中定义为容器, 比如:vector(数组) list(链表)。。。而这些容器对于装入其中的东西并无限制, 比如使用者可定义装int, 也可以装char, 还可以装string数据。
算法: 在C++中定义也叫算法, 比如find, 查找指定的一个元素, 你可在vector容器中查找 , 也可用在list容器查找。 但是在不同的容器中查找效率是不同的, 这是容器本身决定的。
数据结构可以优化数据的存诸,使得数据存诸能够更省空间,查找更高效。
有时候数据结构本身就是一种算法,比如线段树,SPLAY树,堆。
而有一些算法是要建立在数据结构的基础之上才能够更高效的。
对于不同的算法需要采用合适的数据结构。比如最短路径算法,对于希疏图,我们要用连接表来存连。这样才不能导至大量的空连。而且连的查找也更高效。
而对于密图,我们采用连接矩阵来存诸。
呵呵,这两个都是要学的。。。不学你怎么做好编程
你可以这样理解,数据结构你把它理解成excel里面的制作一张表格的表模,比如你做一张工资表,那么表模肯定你要考虑每一个数据的意义和它们应该放置于哪个位置。而算法就是你在表格内部数据间的关联运算,可以是逻辑的也可以是数学的。
因此你制作一张工资表,你肯定要先定结构,然后再定算法。当然你说只学算法不学结构照样能做出结构来,但你考虑更高一个层次,如果你这张工资表只是一个公司几百份表格中的一份,你如果不把它的结构搞得很清楚的表达,你其他表格要调用这张表格的数据就无从做到,而你如果用结构来表示,就很清晰了,这就是结构和算法的不同。
结构是较为宏观的思考方式,算法是微观的实现,它们之间密不可分。当然在现在软件开发工程里面,系统工程师可以分为做结构和做算法的,但一般做结构的都是更核心的成员,他们懂算法,但不用做算法,他们只要把数据结构模型构造好,工程分拆清晰,让其他的程序员按照他们规划的结构去做细致的工作就可以了。
你猜猜看呢?
你这理解不完全正确。
因为数据结构不只是内存中数据的排列,它是对数据的一种组织方式,就像图书馆要排书一样,是为了便于操作,同时它本身也集成了对通用操作:比如查找、比较等的支持。数组不是一种数据结构,而是一种数据类型。一个完整的数据结构包括逻辑结构和存储结构。通常选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。
因此在语言实现上,数据结构通常也会包含与之相对应的算法集合,这些算法是指基本算法:查找、索引、比较等。
数据结构的逻辑结构和硬件是没有关系的,而其存储结构受到计算机硬件系统工作方式的影响,通常这点影响在于数据时顺序存储还是离散存储。算法的基础是数据结构。只有指定明确的数据结构,算法才能设计完成,脱离数据结构,算法是无法,也不可能成立的。因为不需要数据的算法就不是一个有效的计算机算法,算法中任何对数据的组织形式都可以被称之为数据结构。
2.数据结构在编程中的地位是极其重要的,是一个程序实现的基础中的基础,在此基础上才能构建算法。通常而言,你不了解什么高深的算法,一样能完成工作,但是如果你不了解基本的数据结构,那么可以说,你根本就不能完成一个任何有实质性内容的程序。Donald Ervin Knuth教授在其《计算机程序设计艺术》的第一卷《基本算法》中花费的绝大部分的篇幅去论述数据结构。由此可见数据结构对算法的重要性。
一、数据结构和算法浅析
数据结构是计算机 存储 、 组织数据 的 方式 。数据结构是指相互之间存在一种或多种特定关系的数据元素的 集合 。通常情况下,精心选择的数据结构可以带来更高的 运行或者存储 效率。数据结构往往同高效的 检索算法 和 索引 技术有关。
Tips :后面会详细学习记录每一种数据结构,这里只做概念的解释
定义 :为解决一个问题而采取的方法和步骤,就称为“算法”。
特征 :一个算法应该具有以下五个重要的特征
算法的有穷性是指算法必须能在执行有限个步骤之后终止。
算法的每一步骤必须有确切的定义。
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
算法复杂度----数据结构和算法学习的精髓
算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。应用于数学和计算机导论。
1、数据结构是指一组数据的存储结构
2、算法就是操作数据的方法
3、数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上
学习数据结构和算法中。。。算是给自己立的flag,知识总结。