博客
关于我
分治法查找最大值最小值实验
阅读量:802 次
发布时间:2019-03-25

本文共 1607 字,大约阅读时间需要 5 分钟。

分治法寻找数组最大最小值

问题描述

输入一组数据,找出其中的最大值和最小值。这是一种典型的分治问题,可以通过将数据不断划分,然后分别处理子部分来解决。

分治思想

在传统的分治方法中,我们采用递归的方式来解决问题。以下为寻找数组最大最小值的分治实现思路:

  • 初始检查:如果当前范围只包含一个元素,那么最大值和最小值就是该元素本身。
  • 分割数组:将当前数组范围分为左右两部分,取中间点mid。
  • 递归处理
    • 对左半部分(l到mid)使用递归查找最大值和最小值。
    • 对右半部分(mid+1到r)同样使用递归查找最大值和最小值。
  • 合并结果
    • 比较左右两部分的最大值,取较大的作为整体的最大值。
    • 比较左右两部分的最小值,取较小的作为整体的最小值。
  • 代码实现

    #include 
    #include
    #include
    #include
    using namespace std;void search(int *a, int l, int r, int &maxi, int &mini) { if(l == r) { maxi = mini = a[l]; return; } int mid = (l + r) / 2; int max1, max2, min1, min2; search(a, l, mid, max1, min1); search(a, mid+1, r, max2, min2); maxi = max(max1, max2); mini = min(min1, min2);}int main() { int n, i; LARGE_INTEGER nFreq, nBegin, nEnd; double time; ifstream in("input.txt"); ofstream out("output.txt"); in >> n; int a[n]; for(i = 0; i < n; ++i) { in >> a[i]; } QueryPerformanceFrequency(&nFreq); QueryPerformanceCounter(&nBegin); search(a, 0, n-1, maxi, mini); QueryPerformanceCounter(&nEnd); time = (double)(nEnd.QuadPart - nBegin.QuadPart) / (double)nFreq.QuadPart; out << "maxi: " << maxi << " mini: " << mini << "\n" << "search time: " << time << "s\n"; in.close(); out.close(); return 0;}

    复杂度分析

    主函数时间复杂度分析

    递归函数复杂度

  • 递推关系

    • T(n) = 2*T(n/2) + 2
  • 主定理

    • T(n) = k*T(n/m) + f(n^d),其中m^d = 1,k = 2
  • 时间复杂度简化

    • T(n) = O(n)
  • 迭代处理

    迭代方法虽然也能解决问题,但速度是线性的,时间复杂度为O(2n),与分治法相当。

    测试数据及结果分析

    以下是不同规模数据的运行时间测试结果:

    规模(n) 10 100 1000 10000 100000 500000
    耗时/s 1.48e-5 1.7e-5 6.01e-5 6.54e-4 6.71e-3 4.017e-2

    转载地址:http://ozdyk.baihongyu.com/

    你可能感兴趣的文章
    easyexcel 导出 代码翻译converter_【starter推荐】简单高效Excel 导出工具
    查看>>
    echarts 如何在一条柱形显示两个数字_干货 | 如何快速制作数据地图?让你的可视化逼格再高一级!...
    查看>>
    eclipse设置utf8编码_记住没:永远不要在 MySQL 中使用 UTF8
    查看>>
    eclipse里source的快捷方法_Eclipse快捷键/快捷操作汇总
    查看>>
    elasticsearch 查询_Elasticsearch地理信息存储及查询之Geo_Point
    查看>>
    embedding层_【预估排序】Embedding+MLP: 深度学习预估排序通用框架(一)
    查看>>
    excel中最常用的30个函数_Excel玩转数据分析常用的43个函数!
    查看>>
    flink sql设置并行度_Flink 参数配置和常见参数调优
    查看>>
    go 字符串替换_Go 每日一库之 quicktemplate
    查看>>
    hex editor neo下载_口袋妖怪爆焰黑手机版下载-口袋妖怪爆焰黑手游下载v4.3.0 安卓版...
    查看>>
    hibernate mysql 关联查询_spring-boot hibernate 双向关联查询的坑
    查看>>
    hive 建表_sqoop的使用之导入到hive和mysql
    查看>>
    hp工作站z8装Linux,惠普Z8G4双路最小工作站
    查看>>
    html上传图片直接保存到数据库中,Editor上传图片路径存入数据库中怎么弄?
    查看>>
    html游戏玩不了,WinXP网页游戏玩不了怎么办有哪些解决方法
    查看>>
    html转jsp_JSP详解
    查看>>
    ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)...
    查看>>
    image unity 原始尺寸_Unity基础教程-对象管理(十一)——生命周期(Growth and Death)...
    查看>>
    iphone打字怎么换行_手持iPhone?你可能并不知道的小技巧!
    查看>>
    jaccard相似度_自然语言处理之文本相似度计算
    查看>>