我有以下公式:A=(x+x0)^.5 * (y+y0) * (z+z0)^.5
其中,x0、y0和z0在一个给定的运行中是常数,但可能会在程序的不同运行之间发生变化。 x、y和z是随机生成的项目,并且是0到15之间的均匀整数。这意味着有16^3=4096种可能的组合。
我正在尝试找到获取给定A值的百分位数的最有效方法(也将给出x0、y0和z0)。我有两个问题:
1. 是否有一种方法可以创建解决百分位数的解析公式,而无需生成所有可能的A并进行排序?
2. 如果没有,那么在我有关其结构的一些信息的情况下,排序此数据的最有效方法是什么?
我认为答案对于问题#1来说是“否”,但如果有人能提出解析解,我会感到非常惊喜。继续回答问题#2,这是我目前的进展:
数据将通过三个嵌套循环生成:
我们至少知道这些数据的三个特点:
1.数组(0)<数组(1)<数组(2)...
2.数组(0)<数组(16)<数组(32)...
3.数组(0)<数组(256)<数组(512)...
迄今为止,我最好的工作算法是从列表大小16开始的归并排序。然而,它忽略了上述的第二和第三点。
注意:我的问题是关于效率的。我有一个解决方案,虽然速度慢,但可以工作,所以我要找的是最有效的方法。
编辑:这里是一个我开始想出来的解决方案,感觉它应该是最有效的,但它不起作用。我不确定它是否可以被挽救。
将您的值放入三维数组(x、y、z)中。从(0,0,0)开始,它必须是最小的。下一个值必须是(1,0,0)、(0,1,0)或(0,0,1)。进行测试和添加。假设它是(1,0,0)。那么下一个值必须是(2,0,0)、(0,1,0)或(0,0,1)。继续,直到您在O(n)时间内添加了所有值。
缺陷:可能性的数量并不总是限制为3。我想不出一种方法告诉计算机哪些单元格是可能性,而不会影响效率的提高。可能有一种方法,但我还没有想到。
编辑2:我仍然对生成自单调函数的值的最有效排序算法感兴趣,因为理论上这是一个有趣的问题。然而,既然我首先问了是否有捷径来获得百分位数,我选择了引人注目的简单方法“计算小于A的数量”作为答案。
其中,x0、y0和z0在一个给定的运行中是常数,但可能会在程序的不同运行之间发生变化。 x、y和z是随机生成的项目,并且是0到15之间的均匀整数。这意味着有16^3=4096种可能的组合。
我正在尝试找到获取给定A值的百分位数的最有效方法(也将给出x0、y0和z0)。我有两个问题:
1. 是否有一种方法可以创建解决百分位数的解析公式,而无需生成所有可能的A并进行排序?
2. 如果没有,那么在我有关其结构的一些信息的情况下,排序此数据的最有效方法是什么?
我认为答案对于问题#1来说是“否”,但如果有人能提出解析解,我会感到非常惊喜。继续回答问题#2,这是我目前的进展:
数据将通过三个嵌套循环生成:
For x = 0 to 15
For y = 0 to 15
For z = 0 to 15
array(n) = A(x,y,z)
n=n+1
Next z
Next y
Next x
我们至少知道这些数据的三个特点:
1.数组(0)<数组(1)<数组(2)...
2.数组(0)<数组(16)<数组(32)...
3.数组(0)<数组(256)<数组(512)...
迄今为止,我最好的工作算法是从列表大小16开始的归并排序。然而,它忽略了上述的第二和第三点。
注意:我的问题是关于效率的。我有一个解决方案,虽然速度慢,但可以工作,所以我要找的是最有效的方法。
编辑:这里是一个我开始想出来的解决方案,感觉它应该是最有效的,但它不起作用。我不确定它是否可以被挽救。
将您的值放入三维数组(x、y、z)中。从(0,0,0)开始,它必须是最小的。下一个值必须是(1,0,0)、(0,1,0)或(0,0,1)。进行测试和添加。假设它是(1,0,0)。那么下一个值必须是(2,0,0)、(0,1,0)或(0,0,1)。继续,直到您在O(n)时间内添加了所有值。
缺陷:可能性的数量并不总是限制为3。我想不出一种方法告诉计算机哪些单元格是可能性,而不会影响效率的提高。可能有一种方法,但我还没有想到。
编辑2:我仍然对生成自单调函数的值的最有效排序算法感兴趣,因为理论上这是一个有趣的问题。然而,既然我首先问了是否有捷径来获得百分位数,我选择了引人注目的简单方法“计算小于A的数量”作为答案。
<x0, y0, z0>
的单个 A 的百分位数,还是需要计算多个百分位数? - rici