我已经生成了两个0到1之间的随机数列表,一个使用Math.random(),另一个使用单纯形噪声,我试图对随机列表进行排序,使其在相同位置具有峰值和低谷单纯噪声列表。
这是我到目前为止所拥有的;
public float[] organize(float[] list) {
float[] organizedList = new float[list.length];
for (int i = 0; i < simplexList.length; i++) {
float smallestDifference = 2;
for (int j = 0; j < list.length; j++) {
float difference = list[j] - simplexList[i];
if (difference < smallestDifference) {
smallestDifference = difference;
organizedList[i] = list[j];
}
}
}
return organizedList;
}
此方法应该在随机数组中找到最接近单工数组中的项的项,并将其添加到有组织列表中。我想知道这是否是一个很好的方法,或者是否有更好的解决方案?
答案 0 :(得分:0)
我会使用随机列表中的第K个最大项来替换单纯形列表中的第K个最大项。这应该保证结果的形状与原始形状相匹配,至少就峰和谷的位置而言。
要做到这一点,我就是
唯一棘手的部分是构建包含已排序单值的原始索引的列表。一种直接的方法是构建一个扩充列表,其中每个项目都包含原始单纯形值及其索引,然后在单纯形值上对该列表进行排序。
另一种稍微简洁的方法是从包含索引的列表开始,按升序排列[0,1,2,3,...],然后通过应用列出java.util.Collections.sort一个java.util.Comparator,其compare()方法比较了原始simplex_list中的相应值。那看起来像是:
public in compare(Integer indexA, Integer indexB) {
return simplex_list.get(indexA).compareTo(simplex_list.get(indexB));
}
例如,使用&#34;单纯形值增加索引&#34;的方法:
simplex_list = [ 8, 10, 3, 2, 6, 20 ]
# Pair each simplex value with its index
augmented_simplex_list = [ 8@0, 10@1, 3@2, 2@3, 6@4, 20@5 ]
# Sort the value@index items according to value
sorted_augmented_simplex_list = [ 2@3, 3@2, 6@4, 8@0, 10@1, 20@5 ]
# Discard the value part of each item, leaving only the original
# list index
#
sorted_simplex_index_list = [ 3, 2, 4, 0, 1, 5 ]
# Sort the random list
random_list = [ 5, 7, 1, 8, 9, 4 ]
sorted_random_list = [ 1, 4, 5, 7, 8, 9 ]
# Take each item of sorted_random_list and place it at the index
# in the result list indicated by the corresponding item in
# the sorted_simplex_index_list. That is,
# sorted_random_list[0] goes to result_list[sorted_simplex_index_list[0]],
# sorted_random_list[1] goes to result_list[sorted_simplex_index_list[1]],
# and so on, giving:
#
result_list = [ 7, 8, 4, 1, 5, 9 ]
具有原始单面列表的形状。
当然,如果你使用增强的单纯形列表方法,你可能不会真正构建一个显式的sorted_simple_index_list,你只需要从sorted_augmented_simplex_list获取项目的索引部分。