学会选择,学会放弃。
数据结构
数据存储于内存时,决定了数据顺序和位置关系的便是“数据结构”
数据结构一般分为两个维度:逻辑结构和存储结构
- 逻辑结构
逻辑结构即数据之间的关系,逻辑结构可以分为两种:线性结构和非线性结构
线性结构:是一个有序数据元素的集合,其中数据元素之间的关系时一对一的关系,即除了第一个和最后一个元素之外,其他数据元素都是首尾接应的。
常用的线性结构有:栈、队列、链表、线性等。
非线性结构:各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。
常见的非线性结构有:二维数组、树等
- 存储结构
逻辑结构指的是数据间的关系,而存储结构是逻辑结构用计算机语言的实现。常见的存储结构有:顺序存储、链式存储、索引存储、散列存储。
算法的设计
计算机擅长告诉执行一些基本命令,但无法执行复杂的命令。此处的"基本命令"指的是"做加法"或者"在指定的内容低智商保存数据"等。
计算机是以这些基本命令的组合为基础运行的,面对复杂的操作,也是通过搭配组合这些基本命令而实现的。
例如,对n个数字进行排序。
对计算机来说就是复杂的操作,如何设计算法来解决这个排序问题,也就等同于构思如何搭配组合计算机可以执行的那些基本命令来实现这个操作。
算法的选择
能解决问题的算法不止一个,当有多个算法可以解决同一个问题时,在算法的评判上,考量的标准也各有不同。
比如,简单的算法对人来说易于理解,也容易被写成程序,而在运行过程中不需要耗费太多空间资源的算法,就十分适用于内存小的计算机。
不过,一般来说我们最为重视的是算法的运行时间,即从输入数据到输出结果这个过程所花费的时间。
时间复杂度与空间复杂度
时间复杂度和空间复杂度的高低,共同决定着一段代码质量的好坏。
-
时间复杂度
一个算法的时间复杂度,反映了程序运行从开始到结束所需要的时间。把算法中基本操作重复执行的次数(频度)作为算法的时间复杂度。 -
空间复杂度
一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序运行所需内存多少,有个预先估计。
一个程序执行时,除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外。还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。
写在最后
- 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
- 本文首发于掘金,未经许可禁止转载💌
评论区