如果我有两个模块A和B,并在模块A中定义一个类型,
type t1 = THIS of int | THAT of char
Run Code Online (Sandbox Code Playgroud)
然后想要在模块B中进行一些模式匹配或构造该类型的对象,我必须使用类似的东西
A.THIS(3)
Run Code Online (Sandbox Code Playgroud)
这就是它迫使我做的事情,即使在我有一些陈述之后
type t2 = A.t1
Run Code Online (Sandbox Code Playgroud)
在模块的签名和实现中.如果我想减少冗长而不使用'A'怎么办?在模块B?我可以创建一个全新的类型和一个函数来将一个转换为另一个,但这看起来很笨重.有什么我想念的吗?
我正在编写一个程序来模拟一个n体重力系统,它的精度是任意的,取决于我在每一步之间采取的"时间"步长.现在,它可以非常快速地运行多达500个物体,但之后它变得非常慢,因为它必须通过一个算法来确定每次迭代在每对物体之间施加的力.这是复杂的n(n + 1)/ 2 = O(n ^ 2),因此它很快变得非常糟糕也就不足为奇了.我想最昂贵的操作是我通过取平方根确定每对之间的距离.所以,在伪代码中,这就是我的算法当前运行的方式:
for (i = 1 to number of bodies - 1) {
for (j = i to number of bodies) {
(determining the force between the two objects i and j,
whose most costly operation is a square root)
}
}
Run Code Online (Sandbox Code Playgroud)
那么,有什么方法可以优化这个吗?任何花哨的算法可以重复使用过去迭代中使用的距离进行快速修改?有什么有损方法可以减少这个问题吗?也许忽略了x或y坐标(它是2维)超过一定数量的物体之间的关系,这是由它们的质量乘积决定的?对不起,如果这听起来像是在漫无边际,但是我能做些什么才能让它更快?我宁愿保持任意精确,但如果有一些解决方案能够以一点精度降低这个问题的复杂性,我会有兴趣听到它.
谢谢.