适用于计算累进税的数据结构

时间:2011-01-21 05:54:25

标签: algorithm data-structures

A公司有自己的系统,用于对卖家征税。税收以渐进的方式计算。例如。如果卖方出售价值25美元的商品,那么前10美元税率为8%,剩下的15美元税率为7%。因此总税率为15%的25%+ 7%的8%。

他们用来计算税收的表格如下

$0 - $10 8%
$11 - $50 7%
$51 - $500 6%
$501 - $10000 5%
$10001 -$1000000 4% and so on.

您将使用哪种数据结构来存储此表,以及如何使用该数据结构对函数进行编码 float computeTaxableAmount(float amount) {}

1 个答案:

答案 0 :(得分:3)

我使用了一系列结构。考虑:

fields: from  to    percentage cumulative

values: 0     10    0.08       0
        10    50    0.07       0.80 (= (to-from)*percentage from row above)
        50    500   0.06       0.80 + (50-10)*0.07 = 4.00
        500   10000 0.05       4.00 + (500-50)*0.06 = 31.00
        ...

请注意累积字段:通过简单地达到相关税级所隐含的合并税的累计总额。然后,假设你想要一些X美元的销售税,你会发现包含X的行(即from <= X < to)和总税收将是:

(X - from) * percentage + cumulative

预先计算早期税号的合并税可以在程序执行期间保存无意义的数学重复。

你可以进行二元搜索以找到X所属的单一税级,但是 - 由于元素太少 - 计算/移动探测位置的开销可能比线性搜索的“未命中”花费更多。 (如果绝望或无聊,你可以探索一些纳米优化,比如从中间行开始,以最大限度地减少最坏情况,或者从最后匹配的行开始,如果输入值往往相似等等。)