You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按面积加权随机选择矩形的逻辑是否正确?

问题根源分析

1. 最可能的原因:矩形权重(整数点数量)计算错误

题目要求选取的是矩形内部的整数点,所以每个矩形的有效权重不是几何面积,而是整数点的总数:
(x_i - a_i + 1) * (y_i - b_i + 1)
举个例子:矩形[0,0,1,1]的整数点有(0,0)、(0,1)、(1,0)、(1,1)共4个,权重应该是4,而非几何面积1。如果你的rects_area用的是几何面积,那加权概率就完全错了,必然过不了分布校验。

2. 你的加权选择逻辑是正确的

你改编的流抽样算法确实能实现按权重加权随机选择,以你提到的面积2、3、5为例,最终每个矩形被选中的概率正好是2/10、3/10、5/10,完全符合要求:

  • 第一个矩形被选中的概率:初始选中后,后续两次都不替换 → 1 * (1 - 3/5) * (1 - 5/10) = 2/10
  • 第二个矩形被选中的概率:第二次替换成功,第三次不替换 → 3/5 * (1 - 5/10) = 3/10
  • 第三个矩形被选中的概率:第三次替换成功(无论之前选的是谁) → 5/10 = 5/10
    这是加权蓄水池抽样的标准实现,逻辑没问题。

3. 其他可能的问题

  • 选点逻辑错误:选中矩形后,x坐标要在[a_i, x_i]范围内随机选整数,y坐标同理。必须用random.randint(a_i, x_i),如果用浮点转换再取整,可能会出现边界点概率异常的情况。
  • 浮点数精度:当总面积极大时,rects_area[i]/total_area可能有精度损失,但Leetcode测试用例一般不会极端到这个程度,优先级低于前两个问题。

修正建议

  1. 修正权重计算:
self.rects_area = []
for a, b, x, y in rects:
    # 计算矩形内整数点的总数
    point_count = (x - a + 1) * (y - b + 1)
    self.rects_area.append(point_count)
  1. 修正选点逻辑:
# 选中矩形后生成随机点
a, b, x, y = self.rects[selected]
rand_x = random.randint(a, x)
rand_y = random.randint(b, y)
return [rand_x, rand_y]

内容的提问来源于stack exchange,提问作者user13079354

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:03:18