算法导论学习之分治法

本文介绍了分治法的基本思想,包括分解、解决和合并三个步骤,并通过归并排序和幂次方问题展示了分治法的应用。归并排序通过分解、递归排序子序列及合并实现O(nlgn)时间复杂度。幂次方问题利用分治将x^n转化为x^n/2*x^n/2,达到O(lg n)的时间复杂度。此外,还提到了二分查找这一典型分治算法在有序序列中的应用。
摘要由CSDN通过智能技术生成

 分治法的主要思想为将一个大问题转换成一个小问题,再解决每个小问题。主要分为三个步骤:

         1、Devide——大问题分解成小的问题

         2、Conquer——(递归地)解决小问题

         3、Combine——将解合并

下面介绍一些比较常见的运用分治思想的算法。

一、归并排序

        归并排序是性能比较好的一种排序方法,它的时间复杂度是O(nlgn),是典型的运用了分治思想的算法。归并排序的步骤如下:

1、分解。将待排序的n个元素分解成n/2的子序列。

2、解决。使用归并排序递归的排列两个子序列。

3、合并。将两个已排序的子序列合并得出结果。

代码如下:

//将有二个有序数列a[first...mid]和a[mid...last]合并。  
void mergearray(int a[], int first, int mid, int last, int temp[])  
{  
    int i = first, j = mid + 1;  
    int m = mid,   n = last;  
    int k = 0;  
      
    while (i <= m && j <= n)  
    {  
        if (a[i] <= a[j])  
            temp[k++] = a[i++];  
        else  
            temp[k++] = a[j++];  
    }  
      
    while (i <= m)  
       
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值