清华计算几何-ElementUniqueness, MinMap, MaxGap

news2024/9/30 5:00:22

ElementUniqueness问题(EU)

给出一组数给出一组数据,, 判断每个数都是唯一性的或者说判断是否存在重复的.

算法思路很简单, 快速排序 + 遍历判断: Max(O(nlogn) + O(n)) = O(nlogn)算法复杂度

代码实现


bool IsEelementUniqueness(const vector<float>& Elemnts)
{
	vector<float> TempElemnts = Elemnts;
	sort(TempElemnts.begin(), TempElemnts.end());

	for (int index = 0; index < TempElemnts.size() - 1; index++)
	{
		if(TempElemnts[index] == TempElemnts[index + 1])
			return false;
	}

	return true;
}
	vector<float> floatValues = { 4.5f, 2.0f, 3.0f, 2.0f, 1.0f, 1.3f};
	if (IsEelementUniqueness(floatValues))
	{
		printf("Element uniequeness\n");
	}
	else
	{
		printf("not element uniequeness\n");
	}

MinMap和MaxGap问题

MinMap

给出一组数,求相邻两个数的最小间距

求解算法和上面 "EU"问题是同个问题. 相邻两个数最小间距不为0时, 则满足EU,反过来不满足EU.

MaxMap

给出一组数,求相邻两个数的最大间距 

用桶分法:

[1]求出最大和最小值MaxValue和MinValue

[2]n个数,则设计n个Section区间,  SectionLength = (MaxValue - MinValue) / (n - 2)。每个Section存在: 数的数量, 最大值, 最小值

class SectionBucket
{
public:
	float maxValue;
	float minValue;
	int count;

	SectionBucket()
	{
		maxValue = FLT_MIN;
		minValue = FLT_MAX;
		count = 0;
	}
};

[3]遍历所有数, 并且把相应的数用除法划分到相应的区间,并更新该区间的最大和最小值

[4]最后遍历所有的Section, 求取前后两个相邻Section的最大间距.(后Section的最小值减去前Section的最大值)

代码实现

float GetMaxCap(const vector<float>& Elemnts)
{
	float maxValue = FLT_MIN;
	float minValue = FLT_MAX;

	// get max value and min value
	for (int index = 0; index < Elemnts.size(); index++)
	{
		if (Elemnts[index] > maxValue)
		{
			maxValue = Elemnts[index];
		}

		if (Elemnts[index] < minValue)
		{
			minValue = Elemnts[index];
		}
	}

	int n = Elemnts.size();
	vector<SectionBucket> buckets;
	buckets.resize(n);

	float bucketSize = (maxValue - minValue) / (float)(n - 1);

	for (int index = 0; index < n; index++)
	{
		int bucketIndex = int((Elemnts[index] - minValue) / bucketSize) + 1;
		if (bucketIndex == n)
			bucketIndex = n - 1;

		buckets[bucketIndex].count++;

		if (Elemnts[index] > buckets[bucketIndex].maxValue)
		{
			buckets[bucketIndex].maxValue = Elemnts[index];
		}

		if (Elemnts[index] < buckets[bucketIndex].minValue)
		{
			buckets[bucketIndex].minValue = Elemnts[index];
		}
	}


	// bucket index from 1 to n - 1 
	float cap = 0.0f;
	float leftValue = buckets[1].maxValue;
	for (int index = 2; index < n; index++)
	{
		if (buckets[index].count > 0)
		{
			float distance = buckets[index].minValue - leftValue;
			if (distance > cap)
			{
				cap = distance;
			}

			leftValue = buckets[index].maxValue;
		}
	}

	return cap;
}

测试

	vector<float> floatValues = { 4.5f, 2.0f, 3.0f, 2.0f, 1.0f, 1.3f };
	float maxCap = GetMaxCap(floatValues);
	printf("MaxCap = %f\n", maxCap);

算法复杂度

从代码实现很显然MaxCap算法复杂度是O(n)

参考资料

[1]清华计算几何 P61-P65

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

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

相关文章

【数学建模】 机器学习与统计模型

文章目录 机器学习与统计模型1. 统计分布与假设检验1.1 统计量与常见统计分布常见统计分布Python代码示例 1.2 正态性检验Shapiro-Wilk检验Python代码示例 1.3 独立性检验卡方检验Python代码示例 1.4 两组样本的差异性检验独立样本t检验Python代码示例 1.5 方差分析与事后多重比…

基于Django+MySQL球馆场地预约系统的设计与实现(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍&#xff1a;我是程序员阿龙&#xff…

学习STM32(1)--Keil软件安装与基本操作和Keil 软件高级应用

目录 1 引 言 2 实验目的 3 实验内容 3.1 认识单片机和STM32 3.2 安装、认识软件Keil和硬件STM32F103开发板 3.3 学习调试工程 3.4 Keil工程软件的配置 4 深入解析 思考一 1.以项目“12-GPIO输出—使用固件库点亮LED”为例子&#xff0c;认识本地工程文件夹&#xf…

2024下《信息安全工程师》案例简答题,刷这些就够了!

距离2024下半年软考已经越来越近了&#xff0c;不知道今年备考软考信息安全工程师的同学们开始准备了吗&#xff1f; 简答题一直是信安拿分的重点区域&#xff0c;对于许多考生来说&#xff0c;也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家&am…

招聘网站的头像如何上传?

1、某招聘网站 显示的是圆形的&#xff0c;但是上传却需要正方形的300300像素。 2、某某招聘网站 仅支持jpg格式&#xff0c;不支持png 3、某某招聘网站 支持1mb以内图片&#xff0c;格式gif,jpg,png都支持。比较友好 4、某招聘网站 这里仅支持200200像素&#xff0c;图片格…

贪心系列专题篇四

​​​​​​​ 目录 整数替换 解法一 解法二 俄罗斯套娃信封问题 堆箱子 可被三整除的最大和 距离相等的条形码 重构字符串 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 整数替换 题目 思路 下面将使用两种方法来解决这…

【论文阅读】—RTDETR

《DETRs Beat YOLOs on Real-time Object Detection》 最近&#xff0c;基于端到端DETR取得了显著的性能。然而&#xff0c;DETR的高计算成本限制了它们的实际应用&#xff0c;并阻碍了它们充分利用无后处理&#xff08;如非最大抑制&#xff08;NMS&#xff09;&#xff09;的…

Windows下如何像linux一样查看GPU使用情况

在linux下&#xff0c;只要使用 nvidia-smi即可看到服务器中每块卡的使用情况 但是在windows下该如何查看显卡的使用情况呢 通过网上学习发现&#xff0c;windows下有一个叫nvidia-smi.exe的程序 找到它所在的路径&#xff0c;然后在命令行中进入到这个路径&#xff0c;然后…

文件上传漏洞-HackBar使用

介绍 HackBar 是一个用于浏览器的扩展插件&#xff0c;主要用于进行网络渗透测试和安全评估。它提供了一系列方便的工具和功能&#xff0c;可以帮助用户执行各种网络攻击和测试&#xff0c;包括 XSS、SQL 注入、CSRF、路径穿越等 下载地址 可以到github上面去下载&#xff0…

傅里叶级数的C语言验证

目录 概述 1 收敛性 1.1 收敛定理 1.2 理解收敛定理 2 傅里叶级数的应用 2.1 问题描述 2.2 实现方法 3 方波函数的傅里叶验证&#xff08;C语言实现&#xff09; 3.1 方波函数 3.1.1 编写方波函数 3.1.2 程序函数验证 3.2 傅里叶级数函数实现 3.2.1 编写傅里叶级…

Android 实现左侧导航栏:NavigationView是什么?NavigationView和Navigation搭配使用

目录 1&#xff09;左侧导航栏效果图 2&#xff09;NavigationView是什么&#xff1f; 3&#xff09;NavigationView和Navigation搭配使用 4&#xff09;NavigationView的其他方法 一、实现左侧导航栏 由于Android这边没有直接提供左侧导航栏的控件&#xff0c;所以我尝试了…

Frida Hook String构造函数

前言 在实际Android应用开发中&#xff0c;无论是使用多么复杂的算法对字符串进行加密&#xff0c;然而开发者常常会构造出字符串的实例。因此&#xff0c;我们可以通过使用Frida hook String类的构造函数来追踪这些实例的构造位置&#xff0c;然后可以通过构造实例的地方栈回…

Java GUI制作双人对打游戏源码以及应用程序分享

文章目录 前言一、可执行程序二、源码以及图片资源总结 前言 在之前的文章展示了如何构建一款双人对打游戏&#xff0c;博文链接如下&#xff1a; https://blog.csdn.net/qq_43646281/article/details/137748943?spm1001.2014.3001.5501 感兴趣的小伙伴可以再去回顾一下: 原文…

一分钟了解请求转发与重定向

目录 请求转发 重定向 请求转发 为了更好的了解请求转发&#xff0c;我们可以画出关系图&#xff1a; 请求转发的特征: 地址栏的地址不发生改变, 是请求的资源的url请求转发中, 是一次请求request域有效请求转发是在服务器端转发的, 请求转发资源只能是服务器内部资源 重定…

Pointnet++改进即插即用系列:全网首发FMB自调制特征聚合|即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入FMB,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.理论介…

DS18B20数字温度传感器操作解析

文章目录 引言特点工作原理引脚说明配置寄存器温度寄存器时序初始化时序写时序读时序 引言 DS18B20 是一种广泛使用的数字温度传感器&#xff0c;具有高精度和易用性。是Dallas Semiconductor公司&#xff08;现为Maxim Integrated公司&#xff09;生产的单总线数字温度传感器…

Typora+PicGo-Core(command line)+Gitee 实现上传图片到图床(看这一文就够)

前言 ​ 对于喜欢写Markdown文档的人来说&#xff0c;Typora无疑是一个写作利器&#xff0c;它有别于其他的Markdown软件&#xff0c;不是一边编辑一边渲染&#xff0c;而是即写即渲染&#xff0c;这样对于浏览md文件也非常友好。此外Typora还支持更换主题&#xff0c;在其官网…

机器学习 第10章-降维与度量学习

机器学习 第10章-降维与度量学习 10.1 k近邻学习 k近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法其工作机制非常简单:给定测试样本&#xff0c;基于某种距离度量找出训练集中与其最靠近的k个训练样本&#xff0c;然后基于这k个“邻居”的信息来进行预测。通…

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计&#xff09; 本文介绍论文原理介绍网络代码多种yaml设置网络测试及实验结果 本文介绍 YOLOv5&#xff08;You Only Look Once&#xff09;以其高效、准确的实时目标检测性能被广泛应用。然而&#xff0c;随着视觉…

【保姆级讲解C语言中的运算符的优先级!】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…