《大数据算法》一2.4 数组有序的判定算法

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 本节书摘来华章计算机《大数据算法》一书中的第2章 ,第2.4节,王宏志 编著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.4 数组有序的判定算法 本节讨论数组有序的判定问题的判定算法。 1.问题的定义 数组有序的判定问题 输入:包含n个数的数组A。

本节书摘来华章计算机《大数据算法》一书中的第2章 ,第2.4节,王宏志 编著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 数组有序的判定算法

本节讨论数组有序的判定问题的判定算法。
1.问题的定义
数组有序的判定问题
输入:包含n个数的数组A。
输出:若A中元素单调递增则输出“是”;否则输出“否”。
首先看一下这个问题的定义,输出是判定的结果,这个数组是否有序?如果需要精确地回答这个问题,就需要访问n个数,时间是Ω(n)。但是要求是设计亚线性算法,就是不访问所有的数据也能完成判定,所以采用近似算法。
要定义近似,需要用到ε-远离的概念。在这个问题中,ε-远离意味着必须删除大于εn个元素才能保证剩下的元素有序。这个问题的近似版本就变成:这个数组有序还是删除大于εn个元素才能保证有序?
2.近似求解
下面说明怎样设计一个亚线性算法才能解决这个问题。提到亚线性,读者可能直接想到采取抽样的方法,这是可以的。但是如何抽样,如何处理,如何证明抽样的正确性就不那么直观了。算法2-6 数组有序的判定算法

for k=1 to 2/ε do
  选择数组中第i个元素xi
  用xi在数组中做二分查找
  if发现i<j 但是xi>xj then //碰到了“坏”索引
    return false
return true

定理2-7和定理2-8分别描述了该算法的时间复杂度和精度。
定理2-7 算法2-6是亚线性算法。
证明 算法2-6的时间复杂度是2/ε乘以二分查找的代价O(logn),即O2εlogn,该时间复杂度是logn多项式,因而算法2-6是亚线性算法。■
引理2-4 如果“坏”索引的个数小于εn,则其存在一个长度大于εn的单调递增子序列。
证明 往证如果在数组中把坏索引去掉,那么剩下的序列一定是单调递增子序列。因为对于任意“好”索引i和j,xi定理2-8 如果输入数列是有序的,算法2-6返回true;如果输入的数组是ε-远离有序,算法2-6返回false的概率大于2/3。
证明 显然,输入数列有序,则每次二分搜索都得到正确的结果,故算法返回true。
根据引理2-4,如果输入ε-远离有序,则存在大于εn个“坏”元素,即数组的每个元素是“坏”元素的概率大于ε。此时,2/ε次挑选的元素都是好的概率小于(1-ε)2/ε

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
2月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
67 4
|
2月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
102 0
|
2月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
68 0
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
41 0
|
1月前
|
缓存 算法 大数据
大数据查询优化算法
【10月更文挑战第26天】
57 1
|
2月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
40 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
1月前
|
机器学习/深度学习 数据采集 算法
大数据中缺失值处理使用算法处理
【10月更文挑战第21天】
44 3
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
25 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
4月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组