【问题标题】:Partitioning square root of natural numbers into two sets for closest sum?将自然数的平方根分成两组以获得最接近的总和?
【发布时间】:2014-10-27 15:14:40
【问题描述】:

我已经被这个问题困扰了很长一段时间。它要求将数字的平方根从 1 到 n 分成两组 A 和 B,以使 Set A 中的数字之和尽可能接近 Set B 中的数字之和。 我已经很努力了,但我无法想出一个算法。

【问题讨论】:

    标签: algorithm numbers discrete-mathematics


    【解决方案1】:
    • 想象n 非递减顺序的数字(实数),即 你的情况。 sqr(n) 将始终大于 sqr(n - 1)

    • 反转列表。

    • 创建 4 个变量,setAsetB 为空数组,sumAsumB 为初始化为 0 的数字。

    • 从反向列表中选择第一个值并将其附加到setA 并添加到sumA

    • 遍历剩余的反向列表,并分别追加和添加到集合和总和,其总和小于当前值另一个。

    从我的头顶:

    f(divide_in_2_groups) <- (list)
      setA, setB = []
      sumA, sumB = 0
    
      append setA, list[0]
      sumA <- sumA + list[0]
    
      for i <- 1 to n
        //if sumA >= list[i]
        if sumA >= sumB
          append setB, list[i]
          sumB <- sumB + list[i]
        else
          append setA, list[i]
          sumA <- sumA + list[i]
    
      return (setA, sumA, setB, sumB, abs(sumA - sumB))
    

    HTH

    【讨论】:

    • 我相信这个算法不会产生正确的结果。你能发布一个证明这会奏效的证据吗?
    • 对不起,因为我是从头到尾写的,所以我在算法上犯了一个错误。请查看我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2015-08-23
    • 2012-06-28
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多