算法基础2 #旅行商 #数据结构 #选择排序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44925501/article/details/102543985

三、旅行商

有一位旅行商,要去北上广深,问:要算出最短路线,要多少次?

旅行商
北京
上海
广东
深圳

答案是432*1,也就是O(n!)
这是最慢的算法,目前也没有什么好算法解决旅行商问题。

四、几种常用数据结构

1、什么是内存

你去超市,超市外面有寄存柜,你把东西放进去,然后获得一张条子,条子上面写了一个你柜子的位置。内存就相当于一个个柜子的集合,放在里面的是数据,对应的位置就是地址,你可以根据地址找到数据。但是这些柜子,都很小,每个只能放一点点东西,于是你的一堆数据,就需要这么一堆柜子,有这么一堆地址。

2、什么是数组

数组是这里介绍的第一种数据结构,你见过它的,没错就是上面那个列表。数组的别称就叫列表。
现在有一个排列得像Excel表格一样的柜子集,你把东西放在一排连着的抽屉里,这就是数组,内存是连着的。
只要知道第任意一个东西在哪,而且知道它是第几个,就能找到所有的你存放了东西的柜子。那个“几”叫做索引,那些东西叫做元素。东西的数量叫做列表长。如果元素的排列有顺序,就叫有序列表。

3、数组的优缺点

数组的优点很明显,你想要什么东西,知道它的索引,可以直接得到它,因为你清楚知道每一个东西的位置。
数组的缺点就是,某些内存会被其他人占用掉,可能连着的柜子的长度小于列表长,数组就放不进去。
解决办法是,优先声明一些柜子是自己的。但是这样又有两个缺点:第一个,列表长度不够就是占着茅坑不拉屎,浪费内存。第二个,列表长度太长了,函数没有用。
插入元素时,要将其侯敏的元素整体后移,如果位置不够就溢出。

4、什么是链表

链表是这里介绍的第二个数据结构。
没有连着的足够的柜子了,OK好办!算一下有多少东西,打开多少柜子。然后把东西全放进去,把最后一个的地址,也就是那个条子,塞倒数第二个柜子里面,……,一直到把第二个的地址,塞到第一个柜子里。只要知道第一个东西在哪个抽屉,可以根据里面的地址,找到第二个抽屉,进而找到所有。

5、链表的优缺点

链表的优点就是东西随便放,只要把后面的东西的地址放在前一个抽屉就行。
链表的缺点是,如果我要拿到最后一个东西,我要从第一个柜子,然后一个个打开,才能拿到它。
插入元素时,只要修改一个元素的指向即可。

6、什么是字典

字典是这里介绍的第三种数据结构。别名散列表,散列映射,映射,关联数组。
柜子装上了智能系统,输入东西名字,就能直接找到。
优点是不需要连着的内存,取东西也很快。

7、三种数据结构的运行时间

数据结构 插入时间 取出(删除)时间
数组 O(n) O(1)
链表 O(1) O(n)
字典 O(1) O(1)

8、什么是栈

你有一个桶,往里面装石头。这个桶就是一个栈。当你要取出石头时,要先取出最上面的石头。
栈是一种后进先出的结构。

9、什么是队列

一伙人在排队,先来的先排到。
队列是一种先进先出的结构。

10、什么是双端队列

栈加队列。

11、什么是元组

内容不可变的列表。

五、选择排序

1、选择排序

你的手机里存储了许多歌曲,它们都被你反反复复听了很多遍,现在你想把它们按照播放次数从小到大排序。如果采取简单查找,第一次看n个,第二次看n-1个,……共进行n次服从一个等差数列。
T = t 1 / 2 O ( n 2 ) T=t*1/2*O(n^2)

2、代码

#给列表从小到大排序

arr=[5,6,3,2,7,8,9,4,1]
sort_arr = []#定义一个空列表,用来装排序好的元素

def choice_sort(arr,sort_arr):
    smaller = arr[0]#定义一个最小元素
    smaller_index = 0#定义一个最小元素的索引

    for i in range(len(arr)):
        if arr[i] < smaller:
        #只要列表中有元素比它小,这个元素成为新的最小元素,也有新的最小索引
            smaller = arr[i]
            smaller_index = i

    sort_arr.append(smaller)#添加最小元素
    arr.pop(smaller_index)
    #原列表删除这个最小元素,反复迭代,直到原列表为空
    if arr:
        choice_sort(arr,sort_arr)
    else:
        print(sort_arr)


choice_sort(arr,sort_arr)

猜你喜欢

转载自blog.csdn.net/weixin_44925501/article/details/102543985
今日推荐