最小圆覆盖 三分套三分 可以拓展为球

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>

using namespace std;

const int maxn = 10000;
const double eps = 1e-11;
double minx, miny, maxx, maxy;
struct Point
{
	double x, y;
	Point() {}
	Point(double _x, double _y)
	{
		x = _x;
		y = _y;
	}
	Point operator -(const Point &b)const
	{
		return Point(x - b.x, y - b.y);
	}
	double operator *(const Point &b)const
	{
		return x * b.x + y * b.y;
	}
};

Point p[maxn];
int T;

double dist(Point a, Point b)
{
	Point x = a - b;
	return sqrt(x * x);
}

double f(double x, double y)
{
	Point ans1 = Point(x, y);
	double sum = -1.0;
	for (int i = 0; i<T; i++)
	{
		sum = max(dist(ans1, p[i]), sum);
	}
	return sum;
}
double three_search2(double x)
{
	double l = miny, r = maxy;
	while (r - l>eps)
	{
		double lmid = l + (r - l) / 3;
		double rmid = r - (r - l) / 3;
		if (f(x, lmid) >= f(x, rmid))
		{
			l = lmid;
		}
		else
		{
			r = rmid;
		}
	}
	return l;
}

Point three_search()
{
	double l = minx, r= maxx;
	while (r - l>eps)
	{
		double lmid = l + (r - l) / 3;
		double rmid = r - (r - l) / 3;
		if (f(lmid, three_search2(lmid)) >= f(rmid, three_search2(rmid)))
		{
			l = lmid;
		}
		else
		{
			r = rmid;
		}
	}
	return Point(l, three_search2(l));
}

int main()
{
	while (1)
	{
		scanf("%d", &T);
		if (T == 0)
			break;
		minx = 1000000.0,maxx= -1000000.0;
		miny = 1000000.0, maxy = -1000000.0;
		for (int i = 0; i<T; i++)
		{
			scanf("%lf %lf", &p[i].x, &p[i].y);
			minx = min(minx, p[i].x), maxx = max(maxx, p[i].x);
			miny = min(miny, p[i].y), maxy = max(maxy, p[i].y);
		}
		Point ans = three_search();
		printf("%.2lf %.2lf %.2lf\n", ans.x, ans.y, f(ans.x, ans.y));

	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 基于Python的利用历史购物数据分析超市商品摆放规则源码(含实验报告).zip 数据获取及预处理 首次使用数据为从CSDN上获取的购物篮数据集,总计1000条购买数据,进行模型的简单测试。其后将使用kaggle数据集网站中的Instacart Market Basket Analysis数据集,目前正对该数据集进行预处理,提取出product,aisle和department三类数据集,进行后期对单类商品关系规则及大类商品(如肉类,日用品等)的关系规则挖取。 数据分析与可视化 初次使用的数据集部分数据如下所示: ![product.PNG]( projects/P01/product.PNG) 对于初次使用的数据集,商品频繁集统计支持度如下图所示: ![itemset.png]( projects/P01/itemset.png) 模型选取 经过分析和讨论,决定采用经典算法Aprior算法实现,而Aprior算法的基本思想是首先是找出所有大于最小支持度的频繁项集,然后由频繁项集产生关联规则,这些规则必须满足最小支持度和最小可信度。Apriori算法是用来发现频繁项集的一种方法。Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先生成所有单个物品的项集列表,遍历之后去掉不满足最小支持度要求的项集;接下来对剩下的集合进行组合生成包含两个元素的项集,去掉不满足最小支持度的项集;重复该过程直到去掉所有不满足最小支持度的项集。 其步骤是:依据支持度找出所有频繁项集(频度),依据置信度产生关联规则(强度),根据最后产生的关联规则,并考虑到利润因素,辅助商家做出商品的营销决策。 挖掘实验的结果 本次数据挖掘采用参数为最小支持度等于0.2,最小置信度等于0.8,对于初次的数据集挖掘商品规则如下所示: ![re.png]( projects/P01/re.png) 关联规则统计置信度如下图所示: ![rule.png]( projects/P01/rule.png) 存在的问题 首次使用的CSDN中的数据集过小,挖取到的关联规则过于简单 下一步工作 改用Instacart Market Basket Analysis数据集进行最终实验,并根据数据集对参数进行进一步的调优, 并且在传统的关联规则分析的基础上加上商品分类参考因素,不仅获取商品种类相同时关联规则,还获取相异商品种类间的关联规则, 使得最后产生的营销决策能够使商家在更大程度上获益。 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载使用体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值