《图解算法》--快速排序哈希表图广度优先搜索算法

Posted 大诚笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《图解算法》--快速排序哈希表图广度优先搜索算法相关的知识,希望对你有一定的参考价值。

快速排序、哈希表、图、广度优先搜索算法

一、快速排序

思路

  1. 给定一个无序数组,对数组进行排序

  2. 如果数组长度小于2,不用进行排序

  3. 从数组中选择一个基准值

  4. 将数组分成两个子数组,小于基准值的数组和大于基准值的数组

  5. 递归,分别对两个子数组进行快速排序。

代码

def quick_sort(arr):
    if len(arr)<2:
        return arr
    else:
        # 选择基准值
        refer_value = arr[0]
        # 根据基准值,把数组分成两个子数组
        left = [i for i in arr[1:] if i<=refer_value]
        right = [i for i in arr[1:] if i>refer_value]
        # 递归,对两个子数组进行快速排序
        return quick_sort(left) + [refer_value] + quick_sort(right)
arr = [4,5,6,3,2,5,8,1]
quick_sort(arr)     

二、散列表(hash table)

散列表也叫哈希表,是根据key的值直接进行访问的数据结构(key-value).它通过把key的值映射到内存中一个位置,以加快查找的速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做散列表(哈希表)。哈希表的查询速度,插入与删除速度都很快。

Python中的dict{}就是Hashtable的实现。 

三、图

图是由节点和边组成,用于模拟不同节点间的关系 

用Python实现图,表示节点间的关系

graph = {}
graph['A'] = ['B','D']
graph['D'] =  ['B','C']
graph['B'] =  []
graph['C'] = ['B']

四、广度优先搜索算法

思路

  1. 给定一个图,和源节点,从图中搜索出目标节点。

  2. 创建一个队列,用于存储与源节点一度关系的节点。

  3. 从队列(先进先出)中取出一个元素,判断该元素是否是目标节点。

  4. 如果是,返回节点;如果不是,将该节点的所有一度关系节点加入队列。

  5. 重复第三步。

  6. 如果队列为空,说明没有找到目标节点。

代码

from collections import deque
graph = {}
graph['A'] = ['B','D']
graph['D'] =  ['B','daacheng']
graph['B'] =  []
graph['daacheng'] = ['B']

def search(graph):
    # 1、定义一个双端队列
    search_queue = deque()
    # 2、队列存储于源节点一度关系的节点
    search_queue += graph['A']
    searched = []   # 定义列表用于存放已经查询过的节点
    # 如果队列为空,说明没有找到目标节点
    while search_queue:
        # 3.从队列中取出一个判断是不是目标节点
        item = search_queue.popleft()
        if item not in searched:
            if item == 'daacheng':
                print('找到daacheng了')
                return True
            else:
                # 4、如果不是,把该节点所有一度关系节点加入队列
                search_queue += graph[item]
                searched.append(item)
    return False
search(graph)


以上是关于《图解算法》--快速排序哈希表图广度优先搜索算法的主要内容,如果未能解决你的问题,请参考以下文章

算法图解:广度优先搜索

图解算法广度优先搜索

算法图解:广度优先搜索

快速排序模板秦九昭算法模板深度优先搜索DFS广度优先搜索BFS图的遍历逆元中国剩余定理斯特林公式

算法系列——JavaScript中广度优先搜索思想实现

算法系列——JavaScript中广度优先搜索思想实现