根据其他列表组织列表

时间:2017-03-20 20:34:42

标签: java arrays

我已经生成了两个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;
}

此方法应该在随机数组中找到最接近单工数组中的项的项,并将其添加到有组织列表中。我想知道这是否是一个很好的方法,或者是否有更好的解决方案?

1 个答案:

答案 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获取项目的索引部分。