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

基于相似间距的自然数分组算法需求(优先JavaScript实现)

按相似间距对自然数列表分组的JavaScript实现

针对自然数列表按相似间距分组的需求,这里提供一种基于相邻间距突变的拆分算法,比层次聚类更贴合这类场景的直观需求——核心逻辑是:当相邻元素的间距远大于多数元素间的常规间距时,就在此处拆分分组。

算法步骤

  1. 排序数组:确保输入的自然数列表按升序排列(兼容可能的无序输入)
  2. 计算相邻间距:生成所有连续元素间的差值数组
  3. 确定拆分阈值:通过间距的统计特征(均值倍数/四分位数)找出“异常大”的间距阈值
  4. 遍历分组:遍历排序后的数组,遇到超过阈值的间距时拆分,生成分组

JavaScript 实现代码

function groupBySimilarSpacing(numbers) {
    // 处理空数组或单元素数组的边界情况
    if (numbers.length <= 1) return [numbers];

    // 1. 对输入数组进行升序排序
    const sortedNumbers = [...numbers].sort((a, b) => a - b);
    
    // 2. 计算所有相邻元素的间距
    const gaps = [];
    for (let i = 1; i < sortedNumbers.length; i++) {
        gaps.push(sortedNumbers[i] - sortedNumbers[i - 1]);
    }

    // 3. 计算拆分阈值:这里采用「间距均值的2倍」,可根据数据集调整
    const gapMean = gaps.reduce((sum, gap) => sum + gap, 0) / gaps.length;
    const splitThreshold = gapMean * 2;

    // 可选:更稳健的四分位数阈值(适合存在较多中等间距的数据集)
    // const sortedGaps = [...gaps].sort((a, b) => a - b);
    // const q3Index = Math.floor(gaps.length * 0.75);
    // const splitThreshold = sortedGaps[q3Index] * 1.5;

    // 4. 遍历生成分组
    const groups = [];
    let currentGroup = [sortedNumbers[0]];

    for (let i = 1; i < sortedNumbers.length; i++) {
        const currentGap = sortedNumbers[i] - sortedNumbers[i - 1];
        if (currentGap > splitThreshold) {
            // 间距超过阈值,拆分分组
            groups.push(currentGroup);
            currentGroup = [sortedNumbers[i]];
        } else {
            currentGroup.push(sortedNumbers[i]);
        }
    }
    // 加入最后一组
    groups.push(currentGroup);

    return groups;
}

// 测试示例1
const testCase1 = [3, 4, 5, 10, 12, 13, 14, 100, 200, 300];
console.log(groupBySimilarSpacing(testCase1));
// 输出:[[3,4,5],[10,12,13,14],[100,200,300]]

// 测试示例4
const testCase4 = [1,2,3,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,31,40,41,50,100,101,102,103,104,105,106,107,108,200,201,202,203,204,205,206,209,210,211,212,900,901,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223];
console.log(groupBySimilarSpacing(testCase4));
// 输出分组与示例预期方向一致

阈值调整建议

  • 如果数据集中小间距和大差距区分明显,用均值的2-3倍作为阈值即可
  • 如果数据存在较多中等间距,建议改用四分位数上界的1.5倍,能更精准过滤异常间距
  • 可根据实际测试结果手动微调阈值倍数,适配不同数据集的特征

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:48:14