zoukankan      html  css  js  c++  java
  • 算法问题的解决 —— 预测答案结构(限制答案的形式)

    对于一些存在数量庞大的子问题的问题,我们可以强制预测答案结构。所谓预测答案结构,即是寻找可行的答案中可能存在的 pattern,也即规律。

    比如序列的量化问题,将小于 1000 的自然数组成的序列量化成 s 个自然数组成的序列,且要求最终的误差平方和最小。比如,把序列{1 2 3 4 5}量化成{2 2 4 4 4}(s = 2)。

    该问题其实蕴含着丰富的子问题,对着这种具有庞大子问题的问题,我们就可以采用强制预测答案结构的方式进行。

    • 对于给定序列,那么被相同数值量化的数值一定相邻

    例如,量化 {1, 2, 3, 4}时,像{2, 2, 3, 2}形式的答案不可能是最优解。明白了这点,就等于找到了解决此问题的方法:

    • 首先对给定序列排序,
    • 然后采用适当方式分割出相邻数值组成的数值快;
    • 用相应数值表示每个数值快就可以得到最小误差;

    • {1, 4, 6, 744, 755, 777, 890, 897, 902}{{1, 4, 6}, {744, 755, 777}, {890, 897, 902}}

    通过以上步骤,原题就变成“把给定序列分割成 s 个数值快”的问题。显然这种问题采用递归调用的方式就可轻松解决,自然每次递归调用时决定第一个数值快的大小。

  • 相关阅读:
    Code Forces Gym 100886J Sockets(二分)
    CSU 1092 Barricade
    CodeChef Mahesh and his lost array
    CodeChef Gcd Queries
    CodeChef GCD2
    CodeChef Sereja and LCM(矩阵快速幂)
    CodeChef Sereja and GCD
    CodeChef Little Elephant and Balance
    CodeChef Count Substrings
    hdu 4001 To Miss Our Children Time( sort + DP )
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423837.html
Copyright © 2011-2022 走看看