算法通关村-----超大规模数据场景的问题

对20GB文件进行排序

问题描述

假设有一个20GB的文件,每行一个字符串,请说明如何对这个文件进行排序

问题分析

20GB的文件很难一次加载到内存中,可以采用分块策略,先使块内有序,在使块间有序。

实现思路

按照给定的内存要求(假定为1G),进行分块,分为20个块,我们先对每一块进行排序,可以使用快速排序等时间复杂度底的排序算法,然后进行块的合并,使块间有序,合并时,可以使用两两合并的方式,也可以借助堆,按照堆合并K个有序链表的方式使用堆合并K个有序链表进行合并。

超大文本中搜索两个单词的最短距离

问题描述

有一个超大文本,内部是由很多单词组成的,现给定两个单词word1和word2,请找出文件中这两个单词的最短距离
单词

问题分析

双重循环可以实现,但是时间复杂度过高,可以通过两个变量分别指向两个单词在遍历过程中最后出现的位置来实现,如此可在线性时间复杂度,常数空间复杂度情况下完成。

实现思路

最直接的做法就是遍历文件,依次判断遍历到的所有word1与全部word2的距离,这种方式的时间复杂度为O(n^2),为了简化操作,我们可以拼接下标与单词,并将结果存储到List中,即list=[0I,1am,2a…],合并之后查找更方便,一边遍历一边比较就可以了,但是数据量过大的话,list可能会溢出。事实上,不使用list也能够解决。我们定义两个变量index1和index2,index1用于指向当前遍历过程中word1出现的位置,index2用于指向当前遍历过程中word2出现的位置。|index1-index2|即为两个单词之间的最短距离。

问题进阶

寻找过程重复多次,每次寻找不同单词之间的最短距离

实现思路

可以使用map存储单词和所有下标,使用双指针遍历两个单词的下标列表,即可得到两个单词之间的最短距离

从10亿数字中寻找最小的100万个数字

问题描述

设计一个算法,从10亿数字中寻找最小的100万个数字,假设内存足以容纳全部的10亿个数字

问题分析

可以使用快排、选择、和堆三种方式来实现

实现思路

可以使用快速排序的方式使元素按照升序排列,然后取前100万个元素
也可以使用选择的方式,第一次找到最小的数字,第二次找到第二小的数字,以此类推,第100万次找到第100万小的数字
还可以使用大顶堆来实现,设置一个元素容量为100万的大顶堆,堆未满时,直接加入元素,堆满后,只有当当前元素小于堆顶元素时,才移除堆顶元素并加入当前元素,遍历结束后,堆中的元素即为最小的前100万个数字

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

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

相关文章

【重点文章】将Java程序打包成exe文件,无Java环境也可以运行(解决各种疑难杂症)

文章目录 一、将Java程序打成jar包二、将Jar打成exe三、加壳改造成安装包 编译器为IDEA 一、将Java程序打成jar包 2. 3. 你打的包一般会出现在根目录下面的out文件夹下面  当然你也可以用maven的package功能打包,效果是一样的   二、将Jar打成exe 使用工具e…

Opencv 极坐标变换

变换后图片 代码 // 以Center为极坐标原点&#xff0c;将RowFrom到RowTo的圆环&#xff0c;仅仅变换该范围内的点&#xff0c;忽略掉其他部分。 #include "polar_transeforme.hpp" #include <string>using namespace cv;void calculate_map(int rouFrom, int …

springboot(ssm毕业生学历证明系统Java(codeLW)

springboot(ssm毕业生学历证明系统Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据…

python面试题-部分

1 用过Python什么框架 1. **Django&#xff1a;** 用于构建Web应用程序的高级框架&#xff0c;提供了包括ORM&#xff08;对象关系映射&#xff09;、表单处理、模板引擎等在内的许多功能。2. **Flask&#xff1a;** 轻量级的Web框架&#xff0c;它提供了足够的灵活性&#xf…

Linux-去除鼠标箭头

usb触摸板会同时加载hid-generic.c和hid-multitouch.c驱动 [ 213.602561] usb 4-1: new full-speed USB device number 2 using ohci-platform [ 213.834953] usb 4-1: New USB device found, idVendor6615, idProduct108c, bcdDevice 1.30 [ 213.835048] usb 4-1: New USB…

numpy知识库:numpy数据类型转换技巧

需求背景 基于numpy和opencv生成一个随机噪声灰度图像&#xff0c;像素值是范围[0, 256)内的整数&#xff0c;图像形状为(512, 512)&#xff0c;并显示图像&#xff0c;源码如下 import numpy as np import cv2img np.random.randint(0, 256, size[512, 512]) cv2.imshow(&q…

Java后端开发——SpringMVC商品管理程序

Java后端开发——SpringMVC商品管理程序 今日目标 Spring MVC框架介绍掌握SpringMVC的核心类的原理及配置掌握SpringMVC的常用注解掌握SpringMVC的增删改查编程 Spring MVC框架介绍 Spring MVC&#xff08;Model-View-Controller&#xff09;是一个基于Java的开源框架&#x…

Linux系统的常见命令十一,文本编辑器(vi和vim)

目录 vi命令vim命令vi命令与vim命令的区别 本文主要介绍Linux系统的文本编辑器命令vi和vim&#xff0c;还有它们之间的区别。 vi命令 vi是Linux和其他类Unix操作系统中最常用的文本编辑器之一&#xff0c;它的功能强大且灵活&#xff0c;可以通过键盘快捷键来完成大量的编辑操…

AIGC: 关于ChatGPT中输出表格/表情/图片/图表这些非文本的方式

ChatGPT 不止是 文本输出 ChatGPT是一个文本模型, 它本身并不能直接去生成图片图表等内容在我们的工作当中&#xff0c;经常需要通过表格, 图表的方式去进行数据的处理和展示在这种情况下&#xff0c;GPT由于不支持去直接的生成图片和图表&#xff0c;我们还能够使用它的GPT帮…

GANVAEDiffusion

数学基础 KL散度 描绘一个分布p和另一个分布q之间的偏离程度 当 p ( x ) q ( x ) p(x)q(x) p(x)q(x)时散度取得最小值 JS散度 另一种衡量两个概率分布相似性的方法 GAN 需要训练两个网络&#xff1b;损失来回波动&#xff0c;不好分辨&#xff0c;不容易收敛&#xff…

uniapp开发小程序使用axios进行网络请求 uniapp 小程序调试

前言 本篇最好放到项目的【README.md】文件中,方便每次发布的时候检查纠错,毕竟好记性不如烂笔头。而且其他开发者帮忙修改bug、发布新版本的时候,只需要根据这个事项就能实现整个流程的提审发布,提高效率。 1、微信小程序配置 1.1、检查APPID是否正确 测试:wx--------…

Python中的split()、rsplit()、splitlines()的区别

split、rsplit、splitlines的区别 1、split()2、rsplit()3、splitlines() Python提供了三种字符串分割的方法&#xff1a;split()、rsplit()和splitlines()&#xff1b;本文主要通过案例介绍这三种字符串分割函数的区别 1、split() split()主要用于从左向右匹配分割符进行分割…

Java实现动态加载的逻辑

日常工作中我们经常遇到这样的场景&#xff0c;某某些逻辑特别不稳定&#xff0c;随时根据线上实际情况做调整&#xff0c;比如商品里的评分逻辑&#xff0c;比如规则引擎里的规则。 常见的可选方案有: JDK自带的ScriptEngine 使用groovy&#xff0c;如GroovyClassLoader、Gro…

sed和awk使用

区别 1、sed是流编辑器(行)&#xff0c;而awk是文本格式化工具&#xff0c;报告生成器(解释型的编程语言); 2、awk适合对文件进行抽取整理&#xff0c;sed适合对文件进行编辑; 3、sed读取一行数据&#xff0c;会以行作为单位进行处理&#xff0c;而awk读取一…

MacBook macOs安装RabbitMQ【超详细图解】

目录 一、使用brew安装RabbitMQ 二、安装RabbitMQWeb管理界面 三、启动RabbitMQ 一、使用brew安装RabbitMQ 刚好项目要用到RabbitMQ&#xff0c;安装顺便写下安装步骤记录一下以备用 使用brew命令安装&#xff0c;一般Mac会自带这个命令&#xff0c;如没有&#xff0c;…

SQL server-excel数据追加到表

参考文章&#xff1a;SQL server 2019 从Excel导入数据_mssql2019 导入excel数据-CSDN博客 将excel数据导入到SQL server数据库的详细过程 注意&#xff1a;第一行数据默认为数据库表中的字段&#xff0c;所以这个必须要有&#xff0c;否则无法映射导入 问题1&#xff1a;ADD…

开发一款短剧视频小程序软件多少钱?

今年最炙手可热的互联网项目之一当属短剧小程序&#xff0c;常常受到客户的咨询&#xff0c;他们想了解开发一套短剧小程序需要多少费用。今天&#xff0c;我将详细介绍相关费用及开发细节。 小程序认证费用&#xff1a; 每年300元&#xff0c;是确保小程序正常运营所必需的认证…

YOLOv8独家原创改进:自研独家创新FT_Conv,卷积高效结合分数阶变换

💡💡💡本文自研创新改进:卷积如何有效地和频域结合,引入分数阶傅里叶变换(FrFT)和分数阶Gabor变换(FrGT),最终创新到YOLOv8。 使用方法:1)直接替换原来的C2f;2)放在backbone SPPF后使用;等 推荐指数:五星 在道路缺陷检测任务中,原始map为0.8,FT_Conv为0.82 收…

视频智能分析国标GB28181云平台EasyCVR加密机授权异常是什么原因?

国标GB28181视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等。 近期有用户选择使用加密机进行EasyCVR授…

KaiwuDB 亮相中国国际供应链促进博览会

11月28日&#xff0c;全球首个以供应链为主题的国家级展会——2023 中国国际供应链促进博览会&#xff08;简称“链博会”&#xff09;在北京盛大召开。KaiwuDB 受邀亮相大会&#xff0c;向与会者展示现代数据库技术在数字科技链条中的根基作用&#xff0c;其中分布式多模数据库…