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

标签 algorithm data-structures

A 公司有自己的系统,用于向卖家征税。税收以累进方式计算。例如。如果卖家出售值(value) 25 美元的商品,那么前 10 美元的税 = 8%,剩余的 15 美元税 = 7%。所以总税额 = 25 人的 8% + 15 人的 7%。

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

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

您将使用哪种数据结构来存储此表以及如何使用该数据结构编写函数代码 float computeTaxableAmount( float 金额){}

最佳答案

我会使用结构数组。考虑:

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 所属的单个税级,但是 - 考虑到元素很少 - 计算/移动探测位置的开销可能比线性搜索的“未命中”成本更高。 (如果绝望或无聊,您可以探索一些纳米级优化,例如从中间行开始以最大程度地减少最坏情况的遗漏,或者如果输入值趋于相似,则从您上次匹配的行开始等。)

关于algorithm - 适用于计算累进税的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4755828/

相关文章:

algorithm - 单位有惯性怎么寻路?

java - 找到位于这些元素之间距离最小的位置

algorithm - 如何在BIT中找到前缀和为M的位置?

c++ - 嵌套结构声明以及如何访问它们

java - 检测局部最小值和最大值,java

algorithm - 交织/多路复用压缩流

c - 在 C 中实现二叉搜索树的困难

java - 优化二维数组中的删除节点

algorithm - 在图中,找到连接到一个节点但未连接到另一个节点的所有节点的最快方法是什么?

java - 加速 Dijkstra 的多种解决方案会降低性能吗?