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

如何划分价格区间使各区间产品数量大致均等?求优化方案

更优解决方案:按产品数量分段而非价格二分

你的递归二分法问题出在按价格中点切割区间,而非按产品数量来划分。因为产品价格分布不均匀,某些价格段本身产品极少,就算按价格拆分,这些区间的产品数自然会远低于设定的maxNum。

要实现每个区间产品数量大致相同,正确的思路是先按价格排序产品,再按数量分段,最后提取每段的价格区间:

具体步骤

  • 把所有产品的价格提取出来,按升序排序,得到有序数组prices。
  • 计算每个区间的目标产品数:比如总产品1000,maxNum=200,则分成5个区间,每个区间200个产品。
  • 遍历排序后的数组,按数量分割,每段的第一个元素是区间下限,最后一个元素是区间上限(可给后一段的下限加极小值,避免价格重复归属问题)。

代码示例(JavaScript)

function splitByProductCount(prices, maxNum) {
  // 对价格数组升序排序
  const sortedPrices = [...prices].sort((a, b) => a - b);
  const result = [];
  const total = sortedPrices.length;
  let startIndex = 0;

  while (startIndex < total) {
    // 计算当前区间的结束索引,不超过总长度
    const endIndex = Math.min(startIndex + maxNum - 1, total - 1);
    // 取当前区间的最小和最大价格
    const minPrice = sortedPrices[startIndex];
    const maxPrice = sortedPrices[endIndex];
    result.push(`${minPrice}~${maxPrice}`);
    startIndex = endIndex + 1;
  }

  return result;
}

// 示例使用:
const productPrices = [/* 你的1000个产品价格数组 */];
const intervals = splitByProductCount(productPrices, 200);
console.log(intervals);

说明

这种方法直接以产品数量为划分依据,能保证每个区间的产品数最多为maxNum,且所有区间的产品数差异极小(最后一个区间可能少于maxNum,如果总数量不是maxNum的整数倍)。完全避免了原方法中因价格分布不均导致的区间产品数过少的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:50:25