首页 > 编程语言 >Udemy——Python数据结构与算法(11)

Udemy——Python数据结构与算法(11)

时间:2025-01-05 20:30:30浏览次数:3  
标签:11 node traverse Python self Udemy current my def

 课程:【Udemy高分付费课程】Python数据结构与算法 - 终极 Python 编码面试和计算机科学训练营(中英文字幕)_哔哩哔哩_bilibili

算法

归并排序

基本思想

归并排序是一种基于分治思想的排序算法。它的核心思想是将待排序序列不断分成两半,直到每一部分只有一个元素(此时认为是有序的),然后将这些有序的小序列两两合并,得到新的有序序列,如此反复,直到整个序列有序。

def merge(list1,list2):
    combined=[]
    i=0
    j=0
    while i < len(list1) and j < len(list2):
        if list1[i] < list2[j]:
            combined.append(list1[i])
            i+=1
        else:
            combined.append(list2[j])
            j+=1
    while i < len(list1):
        combined.append(list1[i])
        i+=1
    while j < len(list2):
        combined.append(list2[j])
        j+=1
    return combined


def merge_sort(my_lists):
    if len(my_lists)==1:
        return my_lists
    mid =int(len(my_lists)/2)
    left=my_lists[:mid]
    right=my_lists[mid:]
    return merge(merge_sort(left),merge_sort(right))

print(merge_sort([3,5,2,6,8,2,6,3,5,34,156]))

快速排序

  • 选择基准(Pivot): 从待排序的序列中选择一个元素作为基准。
  • 分区(Partition): 将序列中所有比基准小的元素移动到基准的左边,所有比基准大的元素移动到基准的右边。此时,基准元素就位于其最终的排序位置上。
  • 递归排序: 对基准左右两个子序列分别递归地执行步骤 1 和 2,直到每个子序列只有一个元素或为空,排序完成。
def swap(my_list,index1,index2):
    temp=my_list[index1]
    my_list[index1]=my_list[index2]
    my_list[index2]=temp
def pivot(my_list,pivot_index,end_index):
    swap_index=pivot_index
    for i in range(pivot_index+1,end_index+1):
        if my_list[i]<my_list[pivot_index]:
            swap_index+=1
            swap(my_list,i,swap_index)
    swap(my_list,pivot_index,swap_index)
    return swap_index
def quick_sort_helper(my_list,left,right):
    if left<right:
        pivot_index=pivot(my_list,left,right)
        quick_sort_helper(my_list,left,pivot_index-1)
        quick_sort_helper(my_list,pivot_index+1,right)
    return my_list
def quick_sort(my_list):
    return quick_sort_helper(my_list,0,len(my_list)-1)


print(quick_sort([4,6,1,7,3,2,5]))

树遍历 Tree Traversal

基础代码——二叉树

class Node:
    def __init__(self,value):
        self.value=value
        self.left=None
        self.right=None
class BinarySearchTree:
    def __init__(self,value):
        self.root=Node(value)

广度搜索 Breadth First Search

def BFS(self):
    current_node=self.root
    queue=[]
    results=[]
    queue.append(current_node)
    while len(queue)>0:
        current_node=queue.pop(0)
        results.append(current_node.value)
        if current_node.left is not Node:
            queue.append(current_node.left)
        if current_node.right is not Node:
            queue.append(current_node.right)
    return results

深度搜索 Depth First Search

def dfs_pre_order(self):
    results=[]
    def traverse(current_node):
        results.append(current_node.value)
        if current_node.left is not None:
            traverse(current_node.left)
        if current_node.right is not None:
            traverse(current_node.right)
    traverse(self.root)
    return results

def dfs_post_order(self):
    results=[]
    def traverse(current_node):
        results.append(current_node.value)
        if current_node.left is not None:
            traverse(current_node.left)
            traverse(current_node.right)
        if current_node.right is not None:
            traverse(current_node.right)
            traverse(current_node.left)
def dfs_in_order(self):
    results=[]
    def traverse(current_node):
        if current_node.left is not None:
            traverse(current_node.left)
        results.append(current_node.value)
        if current_node.right is not None:
            traverse(current_node.right)
    traverse(self.root)
    return results

标签:11,node,traverse,Python,self,Udemy,current,my,def
From: https://blog.csdn.net/Copomelo249/article/details/144886774

相关文章

  • Udemy——Python数据结构与算法(10)
     课程:【Udemy高分付费课程】Python数据结构与算法-终极Python编码面试和计算机科学训练营(中英文字幕)_哔哩哔哩_bilibiliGraph基本代码classGraph:def__init__(self):self.adj_list={}defprint_graph(self):forvertexinself.adj_list......
  • Udemy——Python数据结构与算法(9)
      课程:【Udemy高分付费课程】Python数据结构与算法-终极Python编码面试和计算机科学训练营(中英文字幕)_哔哩哔哩_bilibili哈希表HashTable通过将键(Key)映射到表中一个位置来访问记录,以加快查找速度。简单来说,它就像一个“字典”,你可以通过一个“索引”(键)快速找到对应的内......
  • 分享一个音乐爬虫的python源码
    爬虫源码和打包后的EXE文件放在网盘了,可直接下载功能特点:-支持多个音乐源: -酷狗音乐 -QQ音乐 -咪咕音乐 -网易云音乐 -酷我音乐 -5sing音乐 -千千音乐-搜索功能: -按歌手搜索 -按歌曲名搜索(支持模糊匹配) -支持多关键词组合......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入24年动态卷积块注意力(Dynamic-CBAM),并构建C2PS
    1.Dynamic-CBAM介绍1.1 摘要:重度抑郁症是一种普遍而严重的心理健康状况,对您的情绪,思想,行动和对世界的整体感知产生负面影响。由于抑郁症的症状不明显,确定一个人是否抑郁是很复杂的。然而,他们的声音可能是我们可以识别抑郁症迹象的因素之一。抑郁的人会表现出不适、悲伤,他们......
  • 精通Python (3)
    该章节主要讲述 分支结构一,应用场景迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数......
  • 精通Python (4)
    本章节讲述循环结构一,应用场景我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中,让机器人向球门方向移动就是一个需要重......
  • Python入门教程 —— 模块和包
    1.导入模块Python中的模块在Python中有一个概念叫做模块(module)。说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。比如我们经常使用工具random,就是一个模块。使用importrandom导入工具之后,就可以使用random的函数。导入模......
  • Python学习(五)——配套《PyTorch深度学习实战》
    1.Python的流程控制tips:我使用的Python3.9版本,if、else是要加:的Python的流程控制主要通过条件语句和循环语句来实现,它们允许程序根据特定的条件执行不同的代码块。以下是Python中常用的流程控制结构:条件语句(if-elif-else)条件语句允许程序根据条件的真假来选择执行不同的代......
  • 基于Python+flask的豆瓣音乐聚类分析可视化
    一、项目概述项目名称:豆瓣音乐聚类分析可视化项目简介:该项目基于Flask框架开发,用于提供音乐数据分析与可视化功能,涉及用户管理、音乐数据爬取、聚类分析及其可视化展示。系统包含用户和管理员角色,提供丰富的页面功能。主要功能:用户登录与注册音乐数据展示与搜索管理......
  • 基于Python+flask的电影数据可视化分析
    项目概述该项目基于Python的Flask框架开发,用于电影数据的分析与可视化,主要功能包括用户管理、数据采集与分析、可视化展示。运行环境开发语言:Python3.8+主要依赖库:Flask(Web框架)PyMySQL(数据库连接)BeautifulSoup(HTML解析)Jieba/NLTK/SnowNLP(自然语言处理)W......