• 面试题的思考之找到最大和最小的数


    一,一种好的方案是:

    先把数组两两分组,这样分成(N/2)组,然后,每组两个数比一次,然后记录两个变量,最小和最大,依次按照组,往后遍历。这样每组(除了第一组)之外,都是比较三次(组内一次,小的跟当前最小的比,大的跟当前最大的比)。这样一共就是O(N*1.5)的时间复杂度。

    二,分析:

    我一开始认为,这样搞的原因是因为,这样搞消除了“获取冗余信息”的能力。就是说,“一个一个去跟最大最小的比,这样搞会得知额外信息,所以这样搞是O(2N)”。

    但是这样认为是错的,用信息论的概念算了一下,我发现【一个一个跟最大最小的比】和【分成两个一组,组内比,然后分别与最大最小比】这两种方案,其实它们消除不确定度的能力是一样的,也就是说,【一个一个去跟最大最小的比,这样搞会得知额外冗余信息,这种想法是错误的】。

    三,结论:

    原因就是因为,时间复杂度的定义:最差情况。这个前提。平均情况下,这两种需要比较的次数相等。但是最差情况下,一个一个比,就会让【每一次比较】消除很小的不确定度。但是,无论何种情况下,【分组比较法】的【每一次比较】都会消除同样的不确定度。

    实际上就是说,当最差极端情况出现时,这两种哪个更稳定的问题。

    其实,也有可能,【一个一个比】次数更少,那就是出现最佳极端情况。

     

  • 相关阅读:
    IPC之util.h源码解读
    新麦装机问题汇
    AngularJS2+调用原有的js脚本(AngularJS脚本跟本地原有脚本之间的关系)
    K60平台智能车开发工作随手记
    苹果手机上下载的文件在哪里?
    Mac电脑C语言开发的入门帖
    Python2中文处理纪要
    比特币核心概念及算法
    将dylib库嵌入macOS应用的方法
    那些令人惊艳的TensorFlow扩展包和社区贡献模型
  • 原文地址:https://www.cnblogs.com/onebook/p/4834073.html
Copyright © 2020-2023  润新知