当前位置: 首页 > news >正文

递归到分治

一、递归与分治:

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);}
}

http://www.mrgr.cn/news/63355.html

相关文章:

  • 指标预警归因分析,及时发现业务问题,快速定位问题根因
  • nginx-proxy-manager实现反向代理+自动化证书(实战)
  • 车载OTA技术及其测试
  • C++学习:类和对象(三)
  • 【neo4j】 neo4j cypher单一语句 optional 可选操作的技巧
  • Laravel5 抓取第三方网站图片,存储到本地
  • 显示器不亮?解决“显示器不支持当前的输入时序,请将输入时序更改为 1920x1080, 60Hz”的终极指南
  • 别再盲目选购随身WiFi了!一文教你精准挑选最适合自己的随身WiFi!随身wifi哪个牌子的最好用?
  • o1驾驶无人机后空翻,OpenAI开发者日惊掉下巴!2分钟爆改代码写App
  • Vite学习之模式
  • AI实践-PyTorch-CNN-手写数字识别
  • 多线程在打包工具中的运用
  • 5分钟搞定:Spring AI支持SpringBoot快速构建人工智能AI应用_springai_springboot_AI应用
  • jlink识别不到gd32@
  • 连续11年领跑行业 凯迪仕智能锁双11再次稳居全渠道销量第一
  • 鸿蒙HarmonyOS应用开发者(基础+高级)认证
  • jmeter结合ansible分布式压测--准备工作
  • 青少年编程与数学 02-003 Go语言网络编程 03课题、网络编程协议
  • 通义灵码上新功能:用代码画流程图
  • 仓库物品带下拉提示搜索与开单自定义数量和备注带提交反馈单页功能
  • 充电宝哪一款最实用?2024年推荐五款性价比最高选择,附选购攻略
  • R语言贝叶斯
  • LeetCode 热题 100之二叉树
  • 语音IC方案,在交通信号灯语音提示器的应用解析,NV040D
  • T10打卡—数据增强
  • 一文了解运维监控体系的方方面面