数据结构与算法基础(准备使用Go来学习)
2022/1/31 17:10:46
本文主要是介绍数据结构与算法基础(准备使用Go来学习),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是算法
算法(algorithm),算法在计算机科学中描述为:计算机接受一个输入的指令,然后进行一个过程处理,最后输出计算的结果。
例如:妈妈让打酱油的过程,打酱油的命令是输入,给妈妈酱油是输出
总之,逻辑过程或者行为模式在计算机中的映射是算法
用更准确的描述来说,算法是一种有限,确定,有效的并适合计算机程序来实现的,用来解决问题的方法。
例如:有一个问题,然后有一个方法去解决它,这个方法叫算法
-
算法是有限的,就是算法的步骤是有限的,执行的时间也是有限的,能够在有限时间内得出结果。
-
算法也是确定的,就是无论执行多少次计算结果都是一样的
-
算法是有效的,就是计算出的结果对解决问题有帮助
一个例子:汉诺塔问题描述
在三根杆(编号A,B,C),在A杆自上而下,由大到小按顺序排序放置64个金盘。
游戏目标:把A杆上的金盘全部移到C杆上并保持原有顺序叠好
操作规则:每次只能移动一个盘子,并且在移动的过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A,B,C任意一杆上
我们想到的算法:
- 借助C杆,将A杆前面N-1个盘子,移动到B杆后,将A杆剩下的一个盘子,直接移动到C杆,只是后A空了
- 然后借助A杆,将B杆的N-1个盘子,移动到C杆,任务完成
package main import "fmt" var total = 0 // 汉诺塔 // 一开始A杆上有N个盘子,B和C杆都没有盘子。 func main() { n := 4 // 64 个盘子 a := "a" // 杆子A b := "b" // 杆子B c := "c" // 杆子C tower(n, a, b, c) // 当 n=1 时,移动次数为 1 // 当 n=2 时,移动次数为 3 // 当 n=3 时,移动次数为 7 // 当 n=4 时,移动次数为 15 fmt.Println(total) } // 表示将N个盘子,从 a 杆,借助 b 杆移到 c 杆 func tower(n int, a, b, c string) { if n == 1 { total = total + 1 fmt.Println(a, "->", c) return } tower(n-1, a, c, b) total = total + 1 fmt.Println(a, "->", c) tower(n-1, b, a, c) }
通过归纳法,我们得知需要移动的次数为2的n次方-1
通过计算可以得知2的64次方-1=18446744073709551615
所以显然得到的这个记过告诉我们,这个算法不是很现实所以我们不使用此方法
什么是数据结构
数据结构,顾名思义就是存放数据的结构,也可以认为是存放数据的容器。比如你要寻找出1000个数字中最大值,首先就需要将这个1000个数字记在某些卡片上,然后对卡片进行排序。
大多数算法都需要组织数据,所以产生了数据结构。数据结构在计算机中,主要是用来实现各种算法的基础,当然数据结构本身也是算法的一部分。
基本的数据结构有:链表,栈和队列,树和图
- 链表:把数据链接起来,关联起来,一个数据节点指向另外一个数据节点,像自然界的一条条铁链,大部分数据结构,都是由链表若干变种来表示。
- 链表也可用数组来实现,但一般情况下,因为数组是连续的,在链表增加和删除节点是容易造成冗余,效果不佳。所以链表在不同编程语言实现是这样的:C,C++用指针实现,Java是用类实现,而Go是用结构体引用来实现。
- 栈和队列,主要用来存储多个数据,只不过一个是先进后出,一个是先进先出。比如下压栈,先入栈的数据是最后才能出来,而我们熟知的队列,先排队的人肯定先获得服务。
- 树和图,树就是一个树根节点,存放着数据,下面有很多子节点,也存放着数据,类比自然界的树。图则可以类比自然界的地图,多个点指向多个点,点和点之间有一条或多条边,而这些点存放着数据,边也可以存放数据,比如距离等
数据结构是算法的辅助,是为了更高效组织数据的结构,所以数据结构和算法其实密切联系。
什么叫好的数据结构和好的算法
学习算法是为了更好的节约资源,但是选择合适的算法很难。我们需要对其进行数学分析才能知道什么是好的算法,在计算机里,我们称这一过程为算法分析
什么是好的数据结构和好的算法
-
计算机资源是有限的,占用计算机资源越小的越好
-
人的生命是有限的,等待的时间越短越好
得出新的理论:时间和空间复杂度理论
算法**
-
计算机资源是有限的,占用计算机资源越小的越好
-
人的生命是有限的,等待的时间越短越好
得出新的理论:时间和空间复杂度理论
这篇关于数据结构与算法基础(准备使用Go来学习)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享