递归到分治

一、递归与分治:

1、递归:如果一个问题分可以简化为某些更小的、更简单的子问题来解决,那么可以用递归

2、分治:如果想并行处理,可以用到分治

在这里插入图片描述

二、假设我们有一段文本,需要统计每个单词出现的频率。我们将步骤分为以下几部分:

1、分割:

将文本分割为多个小块,每个块会在不同的“Mapper”上处理。

2、映射:

每个 Mapper 会对文本块进行单词计数,输出键值对形式的结果,如 (“word”, 1)。

3、洗牌:

将相同的键(单词)汇总到一起,确保相同的单词会发往同一个 Reducer。

4、归约:

在 Reducer 上,对相同的单词进行累加求和,得到最终的词频统计。

5、合并:

可选择在 Mapper 阶段进行本地归约,以减少传输数据量。

import java.util.*;
import java.util.stream.Collectors;

public class MapReduceExample {
    // 模拟文本数据
    static String text = "hello world hello map reduce map reduce example example example";

    public static void main(String[] args) {
        // 1. 分割 - 将文本按空格分割为单词块(每个单词可以认为是一个“分片”)
        List<String> words = Arrays.asList(text.split(" "));

        // 2. 映射 - 每个分片对应一个键值对 (word, 1)
        List<Map<String, Integer>> mappedData = words.stream()
                .map(word -> {
                    Map<String, Integer> map = new HashMap<>();
                    map.put(word, 1);
                    return map;
                }).collect(Collectors.toList());

        // 打印映射后的键值对
        System.out.println("Mapped Data: " + mappedData);

        // 3. 洗牌 - 将相同的键(单词)聚合到一起
        Map<String, List<Integer>> shuffledData = new HashMap<>();
        for (Map<String, Integer> entry : mappedData) {
            for (Map.Entry<String, Integer> e : entry.entrySet()) {
                shuffledData.computeIfAbsent(e.getKey(), k -> new ArrayList<>()).add(e.getValue());
            }
        }

        // 打印洗牌结果
        System.out.println("Shuffled Data: " + shuffledData);

        // 4. 归约 - 对相同的键(单词)累加值
        Map<String, Integer> reducedData = shuffledData.entrySet().stream()
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        e -> e.getValue().stream().reduce(0, Integer::sum)
                ));

        // 打印最终归约结果(词频统计结果)
        System.out.println("Reduced Data (Word Frequency): " + reducedData);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是护网(HVV)需要什么技术?(内附护网超全资料包)

文章目录 一、什么是护网行动&#xff1f;二、护网分类三、护网的时间四、护网的影响五、护网的规则六、什么是红队&#xff1f; 6.1、红队测试的意义 七、什么是蓝队 一、什么是护网行动&#xff1f; 护网行动是以公安部牵头的&#xff0c;用以评估企事业单位的网络安全的…

Chromium127编译指南 Linux篇 - 同步第三方库以及Hooks(六)

引言 在成功克隆 Chromium 源代码仓库并建立新分支之后&#xff0c;配置开发环境成为至关重要的下一步。这一过程涉及获取必要的第三方依赖库以及设置钩子&#xff08;hooks&#xff09;&#xff0c;这些步骤对于确保后续的编译和开发工作能够顺利进行起着决定性作用。本指南旨…

部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio

1. 模块简介 Prometheus 是一个开源的监控系统和时间序列数据库。Istio 使用 Prometheus 来记录指标&#xff0c;跟踪 Istio 和网格中的应用程序的健康状况。Grafana 是一个用于分析和监控的开放平台。Grafana 可以连接到各种数据源&#xff0c;并使用图形、表格、热图等将数据…

Python+Appium+Pytest+Allure自动化测试框架-安装篇

文章目录 安装安装ADT安装NodeJs安装python安装appium安装Appium Server&#xff08;可选&#xff09;安装Appium-Inspector&#xff08;可选&#xff09;安装allure安装pytest PythonAppiumPytestAllure框架的安装 Appium是一个开源工具&#xff0c;是跨平台的&#xff0c;用于…

深入解析缓存模式下的数据一致性问题

今天&#xff0c;我们来聊聊常见的缓存模式和数据一致性问题。 常见的缓存模式有&#xff1a;Cache Aside、Read Through、Write Through、Write Back、Refresh Ahead、Singleflight。 缓存模式 Cache Aside 在 Cache Aside 模式中&#xff0c;是把缓存当做一个独立的数据源…

tensorflow案例4--人脸识别(损失函数选取,调用VGG16模型以及改进写法)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这个模型结构算上之前的pytorch版本的&#xff0c;算是花了不少时间&#xff0c;但是效果一直没有达到理想情况&#xff0c;主要是验证集和训练集准确率…

系统架构图设计(行业领域架构)

物联网 感知层&#xff1a;主要功能是感知和收集信息。感知层通过各种传感器、RFID标签等设备来识别物体、采集信息&#xff0c;并对这些信息进行初步处理。这一层的作用是实现对物理世界的感知和初步处理&#xff0c;为上层提供数据基础网络层&#xff1a;网络层负责处理和传输…

PySpark 本地开发环境搭建与实践

目录 一、PySpark 本地开发环境搭建 &#xff08;一&#xff09;Windows 本地 JDK 和 Hadoop 的安装 &#xff08;二&#xff09;Windows 安装 Anaconda &#xff08;三&#xff09;Anaconda 中安装 PySpark &#xff08;四&#xff09;Pycharm 中创建工程 二、编写代码 …

基于Python的自然语言处理系列(51):Weight Quantization

浮点数表示简介 浮点数的设计允许表示范围广泛的数值,同时保持一定的精度。浮点数表示的基本公式为: 在深度学习中,常见的浮点数格式有:float32(FP32)、float16(FP16)和bfloat16(BF16)。每种格式的具体特性如下: 格式总位数符号位指数位数尾数位数精度计算成…

c++:vector模拟实现

一、vector成员变量 库里实现用的就是这三个成员变量&#xff0c;咱们实现跟库里一样&#xff0c; namespace myvector {template<class T>class vector{public://vecttor的迭代器是原生指针typedef T* iterator;typedef const T* const_iterator; private:iterator _sta…

【Linux系列】Linux 和 Unix 系统中的`set`命令与错误处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

抗疫物资管理:SpringBoot技术应用案例

目 录 摘 要 1 前 言 2 第1章 概述 2 1.1 研究背景 3 1.2 研究目的 3 1.3 研究内容 4 第二章 开发技术介绍 5 2.1相关技术 5 2.2 Java技术 6 2.3 MySQL数据库 6 2.4 Tomcat介绍 7 2.5 Spring Boot框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行…

机器学习实战(一)机器学习基础

"我不断地告诉大家&#xff0c;未来十年最热门的职业是统计学家。很多人认为我是开玩笑&#xff0c; 谁又能想到计算机工程师会是20世纪90年代最诱人的职业呢&#xff1f;如何解释数据、处理数据、从中抽取价值、展示和交流数据结果&#xff0c;在未来十年将是最重要的职业…

树叶分类竞赛(Baseline)以及kaggle的GPU使用

树叶分类竞赛(Baseline)-kaggle的GPU使用 文章目录 树叶分类竞赛(Baseline)-kaggle的GPU使用竞赛的步骤代码实现创建自定义dataset定义data_loader模型定义超参数训练模型预测和保存结果 kaggle使用 竞赛的步骤 本文来自于Neko Kiku提供的Baseline&#xff0c;感谢大佬提供代码…

奥数与C++小学四年级(第十一题 试商)

参考程序代码&#xff1a; #include <iostream> using namespace std; int main() { int dividend 2023; int count 0; // 余数从0开始遍历到被除数 for (int remainder 0; remainder < dividend; remainder) { int divisor remainder 2; // 计算商 if…

GPT-Sovits-2-微调模型

1. 大致步骤 上一步整理完数据集后&#xff0c;此步输入数据, 微调2个模型VITS和GPT&#xff0c;位置在 <<1-GPT-SoVITS-tts>>下的<<1B-微调训练>> 页面的两个按钮分别执行两个文件: <./GPT_SoVITS/s2_train.py> 这一步微调VITS的预训练模型…

关于前端程序员使用Idea快捷键配置的说明

相信很多前端程序员 转到后端第一件事就是安装Idea然后学习java&#xff0c;在这里面最难的不是java的语法&#xff0c;而是关于快捷键的修改&#xff0c;前端程序员用的最多的估计就是VsCode或者Webstorm&#xff0c;就拿我自己举例我经常使用Vscode&#xff0c;当我写完代码下…

ubuntu运行gazebo导致内存越来越少

1.用vscode看代码会一直有没用的日志缓存&#xff0c;可以删掉&#xff08;文件夹留着&#xff0c;可以把里面的东西删掉&#xff09; 2.运行gazebo的模型会有很多缓存文件&#xff0c;可以删掉 log文件夹非常大

视频智能分析平台LiteAIServer入侵检测算法平台部署行人入侵检测算法:智能安防的新利器

在当今数字化时代&#xff0c;安全防护成为了社会各界高度关注的重要议题。随着人工智能技术的不断发展&#xff0c;视频智能分析平台LiteAIServer 行人入侵检测算法应运而生&#xff0c;为安防领域带来了全新的突破与变革。 视频智能分析平台LiteAIServer 行人入侵检测算法是基…

架构师备考-非关系型数据库

基础理论 CAP 理论 C&#xff08;Consistency&#xff09;一致性。一致性是指更新操作成功并返回客户端完成后&#xff0c;所有的节点在同一时间的数据完全一致&#xff0c;与ACID 的 C 完全不同。A &#xff08;Availability&#xff09;可用性。可用性是指服务一直可用&…