gpt4 book ai didi

data-structures - 用于单位转换的良好数据结构?

转载 作者:行者123 更新时间:2023-12-04 07:20:49 24 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

4年前关闭。




Improve this question




StackOverflow 人群。我有一个非常开放的软件设计问题。

一段时间以来,我一直在寻找一个优雅的解决方案,我想知道这里是否有人对这个问题有一些精辟的见解。将此视为数据结构难题。

我想要做的是创建一个能够从任何单位转换为任何单位的单位转换器。假设词法分析和解析已经完成。几个简单的例子:

Convert("days","hours")           // Yields 24
Convert("revolutions", "degrees") // Yields 360

为了让事情更复杂一点,它必须平滑地处理输入之间的歧义:
Convert("minutes","hours")        // Yields (1/60)
Convert("minutes","revolutions") // Yields (1/21600)

为了让事情变得更有趣,它必须处理复杂的单元而不需要列举所有的可能性:
Convert("meters/second","kilometers/hour")
Convert("miles/hour","knots")
Convert("Newton meters","foot pounds")
Convert("Acre feet","meters^3")

没有正确或错误的答案,我正在寻找有关如何实现这一目标的想法。总会有一个蛮力解决方案,但我想要一些简单且可扩展的优雅解决方案。

最佳答案

我将从一个哈希表(或持久查找表 - 您选择如何实现)开始,它在您需要放入的数量对之间进行单位转换。如果您放入每个可能的对,那么这就是您的蛮力方法。

如果您只有部分对,则可以在您必须找到组合的对中进行搜索。例如,假设我的哈希表中有这两个条目:

Feet|Inches|1/12
Inches|Centimeters|2.54

现在,如果我想将英尺转换为厘米,我有一个简单的图形搜索:顶点是英尺、英寸和厘米,边是 1/12 和 2.54 转换因子。在这种情况下的解决方案是两条边 1/12, 2.54(当然,通过乘法组合)。如果你愿意,你可以更喜欢图形参数。

另一种方法可能是应用溯因推理——为此查看有关代数问题解决者的人工智能文本......

编辑:寻址复合单元

简化问题:将“英亩”转换为“米^ 2”

在这种情况下,关键是理解我们在谈论长度单位,所以我们为什么不为单位类型在表中插入一个新列,可以是“长度”或“面积”。即使在较早的情况下,这也有助于提高性能,因为它为您提供了一个简单的列来缩减搜索空间。

现在的诀窍是理解长度 ^ 2 = 面积。为什么不添加另一个存储此元数据的查找:
Area|Length|Length|*

我们将其与主要单位表结合起来:
Meters|Feet|3.28|Length
Acres|Feet^2|43560|Area

所以算法如下:
  • 解为m^2,即m*m,即长度*长度。
  • 输入是英亩,也就是面积。
  • 在元表中搜索 m,并找到长度 * 长度的映射。请注意,在更复杂的示例中,可能存在多个有效映射。
  • 在解决方案中附加一个转换 Acres->Feet^2。
  • 对 Feet->M 执行原始图搜索。

  • 注意:
  • 该算法不知道是使用面积还是长度作为工作的基本域。您可以为其提供提示,或让它搜索两个空间。
  • 元表变得有点暴力。
  • 如果您开始混合类型(例如电阻 = 电压/电流)或做一些非常丑陋的事情并混合单位系统(例如 FooArea = 米 * 英尺),元表将需要变得更智能。
  • 关于data-structures - 用于单位转换的良好数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190347/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com