编程语言
首页 > 编程语言> > 数据结构与算法基础(准备使用Go来学习)

数据结构与算法基础(准备使用Go来学习)

作者:互联网

什么是算法

算法(algorithm),算法在计算机科学中描述为:计算机接受一个输入的指令,然后进行一个过程处理,最后输出计算的结果。
例如:妈妈让打酱油的过程,打酱油的命令是输入,给妈妈酱油是输出
总之,逻辑过程或者行为模式在计算机中的映射是算法
用更准确的描述来说,算法是一种有限,确定,有效的并适合计算机程序来实现的,用来解决问题的方法。
例如:有一个问题,然后有一个方法去解决它,这个方法叫算法

一个例子:汉诺塔问题描述
在三根杆(编号A,B,C),在A杆自上而下,由大到小按顺序排序放置64个金盘。
游戏目标:把A杆上的金盘全部移到C杆上并保持原有顺序叠好
在这里插入图片描述

操作规则:每次只能移动一个盘子,并且在移动的过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A,B,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个数字记在某些卡片上,然后对卡片进行排序。
大多数算法都需要组织数据,所以产生了数据结构。数据结构在计算机中,主要是用来实现各种算法的基础,当然数据结构本身也是算法的一部分。
基本的数据结构有:链表,栈和队列,树和图

数据结构是算法的辅助,是为了更高效组织数据的结构,所以数据结构和算法其实密切联系。

什么叫好的数据结构和好的算法

学习算法是为了更好的节约资源,但是选择合适的算法很难。我们需要对其进行数学分析才能知道什么是好的算法,在计算机里,我们称这一过程为算法分析

什么是好的数据结构和好的算法

  1. 计算机资源是有限的,占用计算机资源越小的越好

  2. 人的生命是有限的,等待的时间越短越好

得出新的理论:时间和空间复杂度理论
算法**

  1. 计算机资源是有限的,占用计算机资源越小的越好

  2. 人的生命是有限的,等待的时间越短越好

得出新的理论:时间和空间复杂度理论

标签:total,移动,链表,算法,Go,盘子,数据结构
来源: https://blog.csdn.net/chiming521/article/details/122760645