这是在采访中问到的。您会得到一个包含货币兑换率的文件。
Sample File :
Currency1 Currency2 Rate
USD INR 50
GBP INR 100
GBP USD 3
....
我们需要确定该文件是否一致?例如,为了使上述文件一致,第三条记录应为GBP-> USD = 2而不是3。如何解决此问题?这是图形问题吗?
答案 0 :(得分:1)
是的,这是一个图形问题。
如果某对货币(A,B)的任何转化路径始终具有相同的汇率,则表格是一致的。
因此,您要查找的是两条给您不同费率的路径。
假设您有一个连通的图(您可以通过某种中间货币从任何事物转换为任何事物)。您可以选择任何一种起始货币,然后像DepthFirstSearch或BreadthFirstSearch一样对其进行扩展(在这里并不重要)并计算汇率。如果您使用的是一种货币,则在存储您所获得的汇率之前没有看到过,如果您已经达到该汇率,则汇率必须相同(否则请停止并说不一致)。
如果没有连通图,则应确保已涵盖所有货币。您可以使用上面的算法,只要找到未达到的货币(以未达到的货币为起点)就可以再次启动它。
一些注意事项:
由于您可以将人工制作的事相乘在一起,因此您可能会得到非常大或非常小的值,这将使比较变得困难。处理这种情况的更好方法是获取数字的对数(基数无关紧要)。现在,乘法被加法代替,并且更加稳定。副作用是加法和减法比乘法和除法快得多。