【15】大数据题目等

news2024/11/17 1:27:55

目录

 

一.大数据题目的解题技巧​编辑

二.找重复的URL

三.利用小内存找出所有出现两次的数。

四.位运算题目

五.面试原题

六,.判断一个32位正数是不是2的幂,4的幂

七.位运算实现加减乘除

加法

减法

乘法

除法


一.大数据题目的解题技巧

 二.找重复的URL

方法一是使用布隆过滤器(边添加边查询,存在很小的失误率)

方法二是哈希分流(哈希分类可可以较匀地将文件分流到几个小文件,相同的文件一定会被分到同一个文件中,然后进一步查找重复的URL)。每个小文件都维护一个Top100的大根堆,然后取每个小文件大根堆的堆顶元素放到总堆中,然后每次取总堆堆顶就是频次最高的词汇。例如取出甲,知道甲是第二个堆的,那么就将甲弹出,然后将下一个最大值丙放入总堆中。。。周而复始

 三.利用小内存找出所有出现两次的数。

方法一:Hash函数按种类均匀分流,将40亿个数根究允许的内存大小,用Hash函数分成多个小文件(使用的是银硬盘空间),然后再在每个小文件中在内存中进行查找出现两次的数,最后将所有小文件中出现两次的数汇总就是答案。

方法二:使用位图,用2个bit位来表示一个数的状态,【00 01 10 11】 = 【0次 1次 2次 >2次】。这样处理的话,需要使用的空间是2^32*2/8Byte空间,1GB是可以搞定的。

 四.位运算题目

 技巧:将互斥的两个条件可以用加号连接。

	// 请保证参数n,不是1就是0的情况下
	// 1 -> 0
	// 0 -> 1
	public static int flip(int n) {
		return n ^ 1;
	}

	// n是非负数,返回1
	// n是负数,返回0
	public static int sign(int n) {
		return flip((n >> 31) & 1);
	} 

	public static int getMax1(int a, int b) {
		int c = a - b;
		int scA = sign(c); // a-b位非负, scA为1. a-b是负, scA为0
		int scB = flip(scA); // scA为0, 
		return a * scA + b * scB;
	}

	public static int getMax2(int a, int b) {
		int c = a - b;
		int sa = sign(a);
		int sb = sign(b);
		int sc = sign(c);
		int difSab = sa ^ sb; // a和b的符号不一样, 返回1, 一样, 返回0
		int sameSab = flip(difSab); // a和b符号一样, 返回1,不一样, 返回0 
		int returnA = difSab * sa + sameSab * sc;
		int returnB = flip(returnA);
		return a * returnA + b * returnB;
	}

	public static void main(String[] args) {
		int a = -16;
		int b = 1;
		System.out.println(getMax1(a, b));
		System.out.println(getMax2(a, b));
		a = 2147483647;
		b = -2147480000;
		System.out.println(getMax1(a, b)); // wrong answer because of overflow
		System.out.println(getMax2(a, b));

	}

 五.面试原题

有一个10G的无序有符号整数文件,如何通过5G的内存生成一个新文件,要求文件里面的数据是有序的。

为什么是统计词频,而不是将小范围的数值直接放入到小根堆中?

这是因为可以某些数的重复次数过多,然后可能会爆掉小根堆。然而换成统计词频(不论某个数出现多少次,占用的内存都是一个定值而已)

六,.判断一个32位正数是不是2的幂,4的幂

判断是否为2的幂:

方法一:取到最右侧的1,然后判断和原数相不相等。

方法二:判断x&(x-1)==0是否成立。

判断是否为4的幂:

七.位运算实现加减乘除

加法

 

	public static int add(int a, int b) {
		int sum = a;
		while (b != 0) {
			sum = a ^ b;
			b = (a & b) << 1;
			a = sum;
		}
		return sum;
	}

减法

	public static int add(int a, int b) {
		int sum = a;
		while (b != 0) {
			sum = a ^ b;
			b = (a & b) << 1;
			a = sum;
		}
		return sum;
	}

	public static int negNum(int n) {
		return add(~n, 1);
	}

	public static int minus(int a, int b) {
		return add(a, negNum(b));
	}

乘法

 

	public static int multi(int a, int b) {
		int res = 0;
		while (b != 0) {
			if ((b & 1) != 0) {
				res = add(res, a);
			}
			a <<= 1;
			b >>>= 1;
		}
		return res;
	}

 除法

	public static boolean isNeg(int n) {
		return n < 0;
	}

	public static int div(int a, int b) {
		int x = isNeg(a) ? negNum(a) : a;
		int y = isNeg(b) ? negNum(b) : b;
		int res = 0;
		for (int i = 31; i > -1; i = minus(i, 1)) {
			if ((x >> i) >= y) {
				res |= (1 << i);
				x = minus(x, y << i);
			}
		}
		return isNeg(a) ^ isNeg(b) ? negNum(res) : res;
	}

	public static int divide(int a, int b) {
		if (b == 0) {
			throw new RuntimeException("divisor is 0");
		}
		if (a == Integer.MIN_VALUE && b == Integer.MIN_VALUE) {
			return 1;
		} else if (b == Integer.MIN_VALUE) {
			return 0;
		} else if (a == Integer.MIN_VALUE) {
			int res = div(add(a, 1), b);
			return add(res, div(minus(a, multi(res, b)), b));
		} else {
			return div(a, b);
		}
	}

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

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

相关文章

uni-app--》打造个性化壁纸预览应用平台(一)

&#x1f3d9;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名前端工程师 &#x1f304;个人主页&#xff1a;亦世凡华、 &#x1f306;系列专栏&#xff1a;uni-app &#x1f307;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

linux更换为阿里云的yum下载镜像源

更换镜像源 1.备份&#xff1a; sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.创建一个文件: cd /etc/yum.repos.d/ touch CentOS-Base.repo 3.往CentOS-Base.repo添加内容 vi CentOS-Base.repo 添加以下内容&#xff1a; [base…

vue3 组合式 API:setup()

查看vue3官网介绍&#xff1a;组合式 API&#xff1a;setup() 在 Vue 3 中&#xff0c;组合式 API 的 setup() 函数是一个非常重要的特性&#xff0c;它提供了一种更灵活和可维护的方式来组织组件的逻辑。 基本概念 setup() 函数是在组件实例创建之前执行的&#xff0c;它用于…

重复玩一个游戏就是自闭症吗?自闭的特征有哪些?

重复玩一个游戏并不一定是自闭症的标志。儿童在成长过程中&#xff0c;有时会因为对某个游戏或活动的喜爱而反复进行&#xff0c;这是他们探索世界、发展兴趣和技能的一种方式。然而&#xff0c;如果这种行为伴随着其他自闭症的典型特征&#xff0c;如语言障碍、社交障碍和兴趣…

C语言 ——— 修改默认对齐数以及结构传参

目录 前言 修改默认对齐数 结构体传参 前言 在上一篇中&#xff0c;有讲解到结构体内存对齐的规则以及默认对齐数 C语言 ——— 结构体内存对齐-CSDN博客 修改默认对齐数 修改默认对齐数所需要的宏命令&#xff1a;#pragma 代码演示&#xff1a; #pragma pack(1) // 将默…

MVCC工作原理深入解析

一、事务概述 mysql事务是指一组命令操作&#xff0c;在执行过程中用来保证要么全部成功&#xff0c;要么全部失败。事务是由引擎层面来支持的&#xff0c;MyISM引擎不支持事务&#xff0c;InnoDB引擎支持事务。 事务具有ACID四大特性 原子性&#xff08;Atomicity&#xff0…

XSS靶场(1-11关)

目录 简述xss xss第1关 xss第2关 ​编辑 xss第3关 xss第4关 xss第5关过滤了 on script xss第6关 xss第7关 xss第8关 xss第9关 xss第10关 xss11关 我把源代码靶场放到了最顶端 简述xss XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法…

【数据结构与算法 | 图篇】最小生成树之Prim算法

1. 前言 普里姆算法&#xff08;Prims Algorithm&#xff09;是一种用于寻找加权无向图中的最小生成树&#xff08;Minimum Spanning Tree, MST&#xff09;的贪心算法。 最小生成树是指对于一个给定的无向图&#xff0c;连接所有顶点且边的总权重最小的生成树。 2. 算法步骤 …

Spring Boot 核心配置

一、 Spring Boot配置文件分类 SpringBoot是基于约定的&#xff0c;所以很多配置都有默认值&#xff0c;但如果想使用自己的配置替换默认配置的话&#xff0c;就可以使用application.properties或者application.yml&#xff08;application.yaml&#xff09;进行配置 applicat…

外贸市场开发【越南】

​作为“新兴之秀” 越南的经济发展可谓是突飞猛进 并在2022年&#xff0c;成为全亚洲经济增长最快速经济体 经济的增长也让越南的地位变得不一样了 一起来看看外贸人聚焦的东南亚排名前五的越南 越南社会主义共和国&#xff0c;通称越南&#xff0c;是位于东南亚的中南半岛…

谷粒商城实战笔记-213-商城业务-认证服务-整合短信验证码服务

文章目录 一&#xff0c;开通阿里云云市场短信服务1&#xff0c;阿里云开通免费短信服务并调试2&#xff0c;整合短信服务2.1 下载HttpUtils代码2.2 开发调用短信服务的组件2.3 测试 HttpUtils代码 这一节主要内容是整合短信发送服务。 一&#xff0c;开通阿里云云市场短信服务…

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现CPO-BP冠豪猪优化…

CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

我的课程笔记&#xff0c;欢迎关注&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器 课程内容 上面三张Slides讲述了运行时间&#xff08;runtime&#xff09;和内存使用&…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT&#xff1f; ChatGPT是由 OpenAI 开发的先进人工智能语言模型&#xff0c;能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议&#xff0c;甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本&#xff0c;它们都拥有强大的语言处理能力&…

sublime text 4 安装(含激活码)安装破解汉化 Sublime Text 4 的操作指南

sublime text 4 安装&#xff08;含激活码&#xff09; 一、下载步骤 官网地址&#xff1a;Sublime Text - the sophisticated text editor for code, markup and prosehttps://link.zhihu.com/?targethttps://www.sublimetext.com/ windows下载链接&#xff1a;Thank You -…

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 补充选学内容

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 首先我们继续推进网课进度。 https://space.bilibili.com/1069874770 传送门 WorldArt锦书产品介绍&#xff1a; 我属实是没想到这个产品居然还可以用作遗迹鉴定和名家笔记仿写这样…

2.2算法的时间复杂度与空间复杂度——经典OJ

本博客的OJ标题均已插入超链接&#xff0c;点击可直接跳转~ 一、消失的数字 1、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 2、题目分析 &#xff08;1&#xff09;numsS…

Java流程控制之循环结构(附案例说明)超详细

循环结构&#xff1a;根据循环条件&#xff0c;重复性执行某段代码 for循环 while 循环 do-while 循环 凡是循环 就有4个要素&#xff1a; 1、初始化要素2、循环条件&#xff08;一定是boolean类型的变量或表达式&#xff09; 3、循环体 4、迭代部分 for 循环格式 for(1;2;…

阿里声音项目Qwen2-Audio的部署安装,在服务器Ubuntu22.04系统——点动科技

阿里声音项目Qwen2-Audio的部署安装&#xff0c;在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表&#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有…