【大数据算法】一文掌握大数据算法之:空间亚线性算法。

news2024/9/17 7:32:17

空间亚线性算法

  • 1、空间亚线性算法
    • 1.1 定义
    • 1.2 核心原理
      • 1.2.1 数据流模型
      • 1.2.2 随机化技术
      • 1.2.3 哈希技术
    • 1.3 应用场景
    • 1.4 算法公式
    • 1.5 代码示例
  • 2、总结

1、空间亚线性算法

1.1 定义

空间亚线性算法是指在处理大数据时,其所需的空间复杂度小于输入数据规模的线性比例(即小于 ( O ( n ) ) (O(n)) (O(n))),通常是 ( O ( log ⁡ n ) ) (O(\log n)) (O(logn)) 或常数空间 ( O ( 1 ) ) (O(1)) (O(1))

这类算法允许在内存受限的情况下高效处理大规模数据集,通常用作近似计算、概率算法或者使用流处理技术。

1.2 核心原理

  • 数据流模型:

    • 数据以流的形式进行处理,允许只对数据的一部分进行存储和操作。算法仅需存储必要的信息以保证计算精度。
  • 随机化技术:

    • 通过引入随机数,算法能够以较小的空间消耗来近似复杂数据集的特征。例如,随机抽样方法可以有效抓取数据分布的特性。
  • 哈希技术:

    • 使用哈希函数来减少数据存储。例如,HyperLogLog 算法通过使用哈希值的位数来近似计算独立元素的数量。

1.2.1 数据流模型

  • 核心原理

    • 有限存储:在数据流模型中,内存的使用必须非常精简。算法通常只存储有限数量的元素或统计信息,而不是整个数据集。
    • 在线算法:数据以序列形式一项项地到来,算法在接收到新的数据项后即可进行处理,而不需要等待完整的数据集。
  • 应用示例

    • 流处理系统:比如 Apache Kafka 和 Apache Flink 允许实时处理数据流。
    • 事件监测:网络监控系统可以实时捕捉和响应异常。
    • 实时分析:电子商务平台可以实时分析用户行为数据,以提供个性化推荐。

1.2.2 随机化技术

  • 核心原理

    • 随机样本:通过随机选择部分数据而非完整数据集来进行估算。这种方法可以显著降低计算复杂度。
    • 概率保障:虽然结果可能是近似的,但随机化算法通常提供关于估计准确性概率的理论保障。
  • 应用示例

    • 随机抽样:在市场调研中,从大规模用户群体中随机抽取样本以估算整体趋势。
    • 随机化算法:如 QuickSort 的随机化版本可在期望情况下达到 ( O ( n log ⁡ n ) ) (O(n \log n)) (O(nlogn)) 的时间复杂度。

1.2.3 哈希技术

  • 核心原理

    • 哈希函数:将数据压缩到较小的固定大小,用于快速查找和存储。好的哈希函数能有效分散输入数据,以避免冲突。
    • 空间效率:哈希技术允许以较少的存储空间近似描述大规模数据。
  • 应用示例

    • HyperLogLog:用于近似计数独立元素,利用哈希值的前导零来计算。
    • 数据去重:在海量文本处理中,哈希能够快速判断某一文本是否已经存在。

1.3 应用场景

  • 频率统计:

    • 例如计算大数据流中某个元素出现的频率。
  • 重心计算:

    • 在图中找到某种特征的重心,常用于社交网络分析。
  • 流数据处理:

    • 处理实时数据流,如网络流量数据分析或监测。
  • 数据去重:

    • 计算大规模数据集中的唯一元素,尤其在存储受限环境中。

1.4 算法公式

  • HyperLogLog:

    • 近似计算独立元素的数量 (N): [ E [ N ] = α m m 2 ⋅ 2 ∑ i = 1 m 2 − Z i ] [ E[N] = \alpha_m m^2 \cdot 2^{\sum_{i=1}^{m} 2^{-Z_i}} ] [E[N]=αmm22i=1m2Zi]
    • 其中 ( Z i ) (Z_i) (Zi) 代表在关于哈希值的前导零的个数, ( m ) (m) (m) 是桶的数量, ( α m ) (\alpha_m) (αm) 是与桶大小相关的常数。
  • Count-Min Sketch:

    • 频率估计 [ Count ( x ) = min ⁡ 1 ≤ j ≤ d C [ j , h j ( x ) ] ] [ \text{Count}(x) = \min_{1 \le j \le d} {C[j, h_j(x)]} ] [Count(x)=min1jdC[j,hj(x)]]

    • 其中 ( C ) (C) (C) 是计数矩阵, ( h j ) (h_j) (hj) 是从数据空间到计数矩阵索引的哈希函数。

1.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-08-20
# @Author : Carl_DJ

'''
实现功能:
	 使用 Count-Min Sketch(CMS)来估计数据流中的频率
'''
import numpy as np
import hashlib

class CountMinSketch:
    def __init__(self, width, depth):
        """初始化 Count-Min Sketch
        Args:
            width (int): 计数矩阵的宽度
            depth (int): 计数矩阵的深度
        """
        self.width = width
        self.depth = depth
        self.table = np.zeros((depth, width))
        self.hash_funcs = [self._hash_function(i) for i in range(depth)]
        
    def _hash_function(self, seed):
        """生成哈希函数
        Args:
            seed (int): 哈希函数的种子
        Returns:
            function: 哈希函数
        """
        def hash_fn(x):
            h = hashlib.md5(f"{seed}{x}".encode()).hexdigest()
            return int(h, 16) % self.width
        return hash_fn
        
    def add(self, item):
        """向 Count-Min Sketch 添加元素
        Args:
            item: 要添加的元素
        """
        for i in range(self.depth):
            index = self.hash_funcs[i](item)
            self.table[i][index] += 1
            
    def estimate(self, item):
        """估计元素的频率
        Args:
            item: 要估计的元素
        Returns:
            int: 估计树的次数
        """
        min_estimate = float('inf')
        for i in range(self.depth):
            index = self.hash_funcs[i](item)
            min_estimate = min(min_estimate, self.table[i][index])
        return min_estimate

# 示例使用
cms = CountMinSketch(width=100, depth=10)
cms.add("apple")
cms.add("apple")
cms.add("banana")

print("Estimated count of apple:", cms.estimate("apple"))  
print("Estimated count of banana:", cms.estimate("banana")) 

代码解析

  • 初始化

    • width 和 depth 定义了计数矩阵的大小。宽度决定哈希表进行索引时的范围,而深度决定了哈希函数的数量。
    • 创建一个二维数组 table 来存储计数数据。
    • 生成多个哈希函数,以便进行多次哈希操作。
  • 哈希函数

    • 根据种子值生成特定的哈希函数,确保每个哈希函数能够将输入映射到计数数组中的不同索引位置。这里使用了 MD5 哈希算法。
  • 添加元素

    • 对于每个要添加的元素,使用每个哈希函数计算其索引位置,然后在计数矩阵相应的位置增加计数。这样的操作会在不同的行上为相同的元素建立多个计数,有效减少哈希冲突带来的误差。
  • 频率估计

    • 为了估计一个元素的频率,应用每个哈希函数计算其索引,并返回在矩阵中存储的最小计数值。
    • 最小值的选择可以有效地降低由于哈希冲突带来的影响,从而得到更接近真实频率的结果。

2、总结

时间亚线性算法在判断数组有序性方面提供了一个高效的解决方案,主要通过避免不必要的比较来降低时间复杂度。

在实践中,根据不同情况下的数组特征,可以进行灵活的实现和优化。

这在大数据的处理、查询优化以及数据验证等多个领域都有广泛的应用前景。

在实际应用中,设计和实现这样的算法需要考虑到数据的特殊性以及优化的策略,以最大程度地提高效率。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者

关注小鱼,学习【大数据算法】领域最新最全的领域知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名…

GO语言快速入门(比较乱)

一、环境安装 1、安装Go环境 1、官网下载 2、cmd-->go version 3、环境变量 GOROOT:go安装路径 GOPATH:go存放代码的路径 4、GOWorks新建三个文件 5、go env查看配置 2、安装编辑器 GoLand或者VSCode 3、HelloWorld package main //一个程序只有一个…

设计模式学习[5]---装饰模式

文章目录 前言1. 原理阐述2. 举例2.1 人装饰方案一2.2 人装饰方案二2.3 人装饰方案三 总结 前言 近期在给一个已有的功能拓展新功能时,基于原有的设计类图进行讨论。其中涉及到了装饰模式,因为书本很早已经看过一遍,所以谈及到这个名词的时候…

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在…

php转职golang第二期

以下是一份简单的 Go 基本语法笔记: 变量与常量: • var 声明变量。• const 声明常量。数据类型: • 整型、浮点型、布尔型、字符串型等。流程控制: • if-else 语句。• for 循环。函数: • 定义和调用函数。数…

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接:394. 字符串解码 1- 思路 栈实现四种情况处理 ① 遇到数字,进行倍数相加 、②遇到左括号,压栈之前的元素、③遇到右括号弹出,栈进行…

DFS 算法:洛谷B3625迷宫寻路

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法:记忆化搜索DFS 算法&#xf…

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成&…

【Android】使用和风天气API获取天气数据吧!(天气预报系列之一)

【Android】使用和风天气API获取天气数据吧!(天气预报系列之一) 古话说得好,要有天气预报,首先需要有天气,和预报。 今天给大家介绍一个好用的天气预报API:和风天气。以及webAPI的使用方法~&a…

【H2O2|全栈】关于HTML(3)HTML基础(二)

HTML相关知识 目录 HTML相关知识 前言 准备工作 标签的具体分类(二) 本文中的标签在什么位置使用? 本期前置知识点 超文本 超文本引用和源属性 图片标签 锚链接 iframe 锚点 预告和回顾 后话 前言 本系列博客将分享HTML相关…

JavaWeb后端开发总结(3)

AOP基础 AOP概述 首先我们要知道AOP是什么? 看下图 个人解析: AOP叫做面向切面编程,但是实际上就是面向方法编程 图中下面一部分是一个AOP的案例 AOP快速入门案例代码实现 案例:测出业务中各个业务方法所需的执行时间 如果…

怎么利用NodeJS发送视频短信

随着5G时代的来临,企业的数字化转型步伐日益加快,视频短信作为新兴的数字营销工具,正逐步展现出其大的潜力。视频群发短信以其独特的形式和内容,将图片、文字、视频、声音融为一体,为用户带来全新的直观感受&#xff0…

单片机DMA原理及应用详解(上篇)(附工程源码)

这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获! 目录 一、DMA简介 二、DMA原理 三、DMA中断 1. DMA中断的工作原理 2. DMA中断的优点 3. DMA中断的配置和处理 4. 应用场景 四、结语 一、DMA简介 1、DMA(D…

数据分析训练模型后输出模型评估报告

数据分析训练模型后输出模型评估报告 1、模型评估指标 1.1、概念: A:n个正样本,检测到是真值的数量 B:m个负样本,检测到是真值的数量 C:n个正样本,检测到假值的数量 D:m个负样本,检测到假值的数量 1.2、准确率(Accuracy) 正确预测的样本数量与总样本数量的比值。…

轨迹规划-B样条

B样条究竟是干啥的?白话就是给出一堆点,用样条的方式,给这些点连接起来,并保证丝滑的。 同时B样条分为准均匀和非均匀,以下为准均匀为例。 参考链接1:https://zhuanlan.zhihu.com/p/50626506https://zhua…

IP宿主信息在不同领域的广泛应用

在网络世界中,IP地址作为网络设备的唯一标识,扮演着至关重要的角色。而IP宿主信息,通过IP与POI/AOI信息关联,能够帮助用户了解特定IP地址所属的详细信息。本文将深入探讨IP宿主信息在不同领域的广泛应用。 什么是IP宿主信息&…

汽车功能安全--TC3xx之PBIST、MONBIST

目录 1.PMS 电源监控速览 2.PBIST 3.MONBIST 4.小结 1.PMS 电源监控速览 英飞凌TC3xx芯片的四种硬件机制,分别是: PMS:PBIST: Power Built-in Self Test. MCU:LBIST: Logic Built-in Self Test. PMS:MONBIST: Monitor Built-in Self Test. VMT:MBI…

嵌入式基础1-模拟电路技术-3.放大电路

1. 基本放大电路 1. 放大概念与放大电路性能指标 2. 基本共射放大电路工作原理 3. 放大电路的分析方法 阻容耦合 4.案例 2. 多级放大电路 1. 多级放大电路的耦合方式 2. 多级放大电路动态分析 3. 差分放大电路 3. 集成运算放大电路 4. 放大电路的反馈 1. 反馈的基本概念…

云计算第四阶段----CLOUD 01-03

CLOUD Day01 一、虚拟化平台搭建 虚拟化技术产品介绍 #黄线标注的,都是比较主流且常用的虚拟化平台。 虚拟化与云计算的关系 虚拟化是一种技术,它允许在单个物理服务器上创建和运行多个虚拟机(VMs),每个虚拟机都有其…

二叉树的相关选择题和基本方法(持续更新)

二叉树相关选择题和基本方法 选择题1选择题2选择题3选择题4选择题5选择题6选择题7选择题8选择题9选择题10选择题11选择题12选择题13选择题14选择题15选择题16选择题17选择题18选择题19选择题20选择题21选择题22实现二叉树的基本操作查询二叉树当中节点的个数遍历思想子问题思想…