当前位置: 首页 > news >正文

网站可以给pdf做笔记网站建设设计服务公司

网站可以给pdf做笔记,网站建设设计服务公司,做网站要的图片斗鱼,想要给网站投稿如何做Python 算法高级篇#xff1a;归并排序的优化与外部排序 引言 1. 归并排序的基本原理2. 归并排序的优化2.1 自底向上的归并排序2.2 最后优化 3. 外部排序4. 性能比较5. 结论 引言 在计算机科学中#xff0c;排序是一项基本的任务#xff0c;而归并排序#xff08; Merge S… Python 算法高级篇归并排序的优化与外部排序 引言 1. 归并排序的基本原理2. 归并排序的优化2.1 自底向上的归并排序2.2 最后优化 3. 外部排序4. 性能比较5. 结论 引言 在计算机科学中排序是一项基本的任务而归并排序 Merge Sort 是一种著名的排序算法它具有稳定性和良好的时间复杂度。本文将介绍归并排序的基本原理然后深入探讨如何进行优化以及如何应用归并排序进行外部排序。 ❤️ ❤️ ❤️ 1. 归并排序的基本原理 归并排序采用分治的策略将一个大问题分解为小问题解决小问题然后将它们合并以获得最终解决方案。其基本步骤如下 1 . 分割 Divide 将数组划分为两个子数组通常是平均分割。2 . 递归 Conquer 递归地对子数组进行排序。3 . 合并 Merge 将排好序的子数组合并为一个有序的数组。 下面是一个简单的归并排序算法的 Python 实现 def merge_sort(arr):if len(arr) 1:mid len(arr) // 2 # 找到数组的中间位置left_half arr[:mid]right_half arr[mid:]merge_sort(left_half) # 递归排序左半部分merge_sort(right_half) # 递归排序右半部分i j k 0# 合并两个子数组while i len(left_half) and j len(right_half):if left_half[i] right_half[j]:arr[k] left_half[i]i 1else:arr[k] right_half[j]j 1k 1while i len(left_half):arr[k] left_half[i]i 1k 1while j len(right_half):arr[k] right_half[j]j 1k 1归并排序的时间复杂度是 O ( n log n )它是一种稳定的排序算法但它需要额外的空间来存储临时数组。 2. 归并排序的优化 尽管归并排序的时间复杂度相对较低但它在实际应用中可能会因为空间复杂度较高而受到限制。为了解决这个问题可以进行一些优化。 2.1 自底向上的归并排序 传统的归并排序是自顶向下的即从顶部开始递归划分子数组。在自底向上的归并排序中我们从底部开始首先将相邻的元素两两合并然后是四四合并八八合并直到整个数组排序完成。这样可以减少递归所需的栈空间降低空间复杂度。 以下是自底向上归并排序的 Python 实现 def merge_sort_bottom_up(arr):n len(arr)curr_size 1while curr_size n:for left in range(0, n - 1, 2 * curr_size):mid min(left curr_size - 1, n - 1)right min(left 2 * curr_size - 1, n - 1)if mid right:merge(arr, left, mid, right)curr_size * 2def merge(arr, left, mid, right):n1 mid - left 1n2 right - midL [0] * n1R [0] * n2for i in range(n1):L[i] arr[left i]for i in range(n2):R[i] arr[mid i 1]i j 0k leftwhile i n1 and j n2:if L[i] R[j]:arr[k] L[i]i 1else:arr[k] R[j]j 1k 1while i n1:arr[k] L[i]i 1k 1while j n2:arr[k] R[j]j 1k 12.2 最后优化 归并排序的一个缺点是它需要额外的空间来存储临时数组。为了避免这种情况可以使用一个额外的数组来存储一半的数据然后交替地将数据复制到原始数组中。这可以降低空间复杂度但增加了一些额外的复制操作。 以下是这种优化方法的 Python 实现 def merge_sort_optimized(arr):n len(arr)temp_arr [0] * ncurr_size 1while curr_size n:left 0while left n - 1:mid min(left curr_size - 1, n - 1)right min(left 2 * curr_size - 1, n - 1)if mid right:merge_optimized(arr, left, mid, right, temp_arr)left 2 * curr_sizecurr_size * 2def merge_optimized(arr, left, mid, right, temp_arr):i leftj mid 1for k in range(left, right 1):temp_arr[k] arr[k]k leftwhile i mid and j right:if temp_arr[i] temp_arr[j]:arr[k] temp_arr[i]i 1else:arr[k] temp_arr[j]j 1k 1while i mid:arr[k] temp_arr[i]k 1i 1这种优化方法减少了内存的使用但增加了一些额外的复制操作。 3. 外部排序 归并排序还可以应用于外部排序这是一种处理大规模数据集的排序方法。外部排序的主要思想是将大数据集分成多个小数据块每个小数据块都可以在内存中进行排序。排序后将这些小数据块合并成一个有序的大数据集。 下面是一个简单的外部排序示例假设我们有一个非常大的文件无法一次性加载到内存中进行排序。我们可以将文件划分为多个小文件块分别进行排序然后合并它们。 def external_sort(input_file, output_file, chunk_size):# 划分文件为多个块divide_file(input_file, chunk_size)# 对每个块进行内部排序sort_chunks()# 合并排序后的块merge_sorted_chunks(output_file)def divide_file(input_file, chunk_size):# 从输入文件中读取数据并划分为块passdef sort_chunks():# 对每个块进行内部排序passdef merge_sorted_chunks(output_file):# 合并排序后的块pass这个示例演示了如何将大文件划分为多个小文件块每个块都可以在内存中排序。然后排序后的块将被合并为一个有序的输出文件。 4. 性能比较 为了演示归并排序的不同优化版本之间的性能差异我们可以使用一些基准测试来比较它们的运行时间。下面是一个简单的性能比较示例 import random import timeitarr [random.randint(1, 1000) for _ in range(1000)]# 未优化的归并排序 def merge_sort_original(arr):if len(arr) 1:mid len(arr) // 2left_half arr[:mid]right_half arr[mid:]merge_sort_original(left_half)merge_sort_original(right_half)i j k 0while i len(left_half) and j len(right_half):if left_half[i] right_half[j]:arr[k] left_half[i]i 1else:arr[k] right_half[j]j 1k 1while i len(left_half):arr[k] left_half[i]i 1k 1while j len(right_half):arr[k] right_half[j]j 1k 1# 测试未优化的归并排序的性能 original_time timeit.timeit(lambda: merge_sort_original(arr.copy()), number1000)# 优化的归并排序 def merge_sort_optimized(arr):# 同上省略优化后的代码# 测试优化的归并排序的性能 optimized_time timeit.timeit(lambda: merge_sort_optimized(arr.copy()), number1000)print(未优化的归并排序耗时, original_time) print(优化的归并排序耗时, optimized_time)在上述示例中我们对未优化的归并排序和优化后的归并排序进行了性能测试。通过这种方式你可以比较它们的性能并选择最适合你应用的版本。 5. 结论 归并排序是一种经典的排序算法它使用分治策略和合并操作具有稳定的性质和较低的时间复杂度。通过进行优化例如自底向上的归并排序和减少内存使用的外部排序我们可以提高归并排序的性能和适用性。根据应用的需求和资源限制选择合适的排序算法版本以获得最佳性能。这些优化方法可以在处理大数据集和内存受限的情况下发挥重要作用。 [ 专栏推荐 ] 《Python 算法初阶入门篇》 ❤️【简介】本课程是针对 Python 初学者设计的算法基础入门课程涵盖算法概念、时间复杂度、空间复杂度等基础知识。通过实例演示线性搜索、二分搜索等算法并介绍哈希表、深度优先搜索、广度优先搜索等搜索算法。此课程将为学员提供扎实的 Python 编程基础与算法入门为解决实际问题打下坚实基础。
http://www.dnsts.com.cn/news/96893.html

相关文章:

  • 深喉咙企业网站帮助东莞如何制作网页
  • 企业核名网站成都房地产开发商排名
  • 中国建造师官方网站查询商丘网站建设商丘
  • 淘宝网站建设目的快速做网站费用
  • 如何评价网站是否做的好处新媒体营销六种方式
  • 程序源代码网站凡客诚品盈利模式
  • 网站开发支付模块今天的新闻内容摘抄30字
  • 网站怎么连接网长沙有什么好玩的水上乐园
  • 酒店为什么做网站深圳深圳龙岗网站建设
  • 中能建西北城市建设有限公司网站哈尔滨建站流程
  • 网站开发项目总结范文建设银行中国网站首页
  • 打开百度网站网站制作软件大全
  • 提升网站关键词排名外贸网站开发哪家好
  • 酒店网站建设公司网站建设所需要的东西
  • 网站规划管理系统阿里低代码开发平台
  • ppt模板免费下载网站不用登录设计门户网站
  • 视频类html网站模板泉州seo外包
  • 盘锦兴隆台住房和城乡建设网站做学校网站素材
  • 外贸网站如何做推广是什么南宁网站设计推荐
  • 做网站计划表电脑买编程代码做网站
  • 保定知名网站建设公司盘锦seo网站建设
  • 极速网站开发wordpress 媒体库 删除
  • wordpress 制作手机站html5网页制作作业
  • 外贸公司的网站建设模板下载网站开发投标书范本目录
  • dede中英文企业网站长春网站优化常识
  • 手机代码网站有哪些问题吗网络营销主要学什么
  • 什么是工具型网站安卓app定制
  • 餐饮加盟什么网站建设上海的网站建设
  • 福建省住房和城乡建设厅网站电话薄荷网wordpress
  • 网站建设考试卷a卷wordpress 指定阅读