разделите последовательность 2n вещественные числа так, чтобы

Я думаю, сделает это для Вас. Я починил его от подобной функции, которая возвратила данные как строку:

private static byte[] decode(String encoded) {
    byte result[] = new byte[encoded/2];
    char enc[] = encoded.toUpperCase().toCharArray();
    StringBuffer curr;
    for (int i = 0; i < enc.length; i += 2) {
        curr = new StringBuffer("");
        curr.append(String.valueOf(enc[i]));
        curr.append(String.valueOf(enc[i + 1]));
        result[i] = (byte) Integer.parseInt(curr.toString(), 16);
    }
    return result;
}
9
задан Cœur 11 December 2017 в 12:27
поделиться

3 ответа

Алгоритм работает, потому что когда x 0 , x 1 , ... x 2n-1 является отсортированным списком , всегда существует оптимальное решение, которое содержит (x 0 , x 2n-1 ).

Доказательство:

Рассмотрим любое оптимальное решение, которое не не содержат (x 0 , x 2n-1 ). Он должен содержать пары (x 0 , x a ) и (x b , x 2n-1 ) с x 0 ≤ x a ≤ x 2n-1 и x 0 ≤ x b ≤ x 2n-1 . Удалите эти пары из решения и вместо них положите (x 0 , x 2n-1 ) и (x a , x b ). Могло ли присутствие любой новой пары «повредить» решение? Пара (x 0 , x 2n-1 ) не могла иметь, поскольку ее сумма меньше или равна сумме (x b , x 2n-1 ), который был членом исходного оптимального решения. И снова не могло быть (x a , x b ) причинить ущерб, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

x 2n-1 ) не могло быть, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), которая была член оригинального, оптимального решения. И опять же (x a , x b ) не могло причинить ущерба, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

x 2n-1 ) не могло быть, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), которая была член оригинального, оптимального решения. И опять же (x a , x b ) не могло причинить ущерба, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

x 2n-1 ), который был членом исходного оптимального решения. И опять же (x a , x b ) не могло причинить ущерба, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

x 2n-1 ), который был членом исходного оптимального решения. И опять же (x a , x b ) не могло причинить ущерба, поскольку его сумма меньше или равна сумме (x b , x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

x 2n-1 ), который был членом того же решения. Мы построили оптимальное решение, которое действительно содержит (x 0 , x 2n-1 ).

Таким образом, приведенный вами алгоритм никогда не исключает возможности поиск оптимального решения на любом этапе, и когда остается только два значения для объединения в пары, они должны быть объединены вместе.

9
ответ дан 4 December 2019 в 15:21
поделиться

Для входного массива

x 0 x 1 x 2 ... x 2n

используйте сортировку слиянием, чтобы отсортировать его за O (n log n) раз, чтобы создать отсортированный список

x a 0 x a 1 .. .x a 2n

где индексы a i указывают перестановку, которую вы выполнили в начальном списке для получения второго списка.

Я утверждаю, что спаривание которая дает минимальную максимальную сумму по всем парам, является следующей парой:

(x a i , x a 2n-i ) для i = 0 , 1, ..., п. То есть вы группируете число с наибольшим значением и числом с наименьшим значением.

Доказательство

Действуйте по индукции, для случая 2n = 2 это очевидно.

Без ограничения общности считайте, что входные данные представляют собой список отсортированных чисел (поскольку, если это не так, то отсортируйте их)

x 0 x 1 x 2 ... x 2n .

Рассмотрим спаривание x 2n с любым числом, тогда очевидно, что минимальная сумма этой пары достигается с помощью (x 2n , x 0 ).

Теперь рассмотрим объединение x 2n-1 , либо (x 2n , x 0 ), (x 2n-1 , x 1 ) - пары, которые производят минимальную максимальную сумму, или (x 2n , x 1 ), (x 2n-1 , x 0 ) равно или оба. В последнем случае наш выбор не имеет значения. За секунды до последнего случая это невозможно (подумайте об этом. ) В общем случае, если мы продолжим этот процесс индуктивно, когда мы ищем пару для x 2n-k , x k - это наименьшее неиспользуемое значение, которое мы можем объединить с, однако; предположим, что вместо этого мы объединяем x k в пару с некоторым другим x 2n-j для j 2n-j + x k > = x 2n-k + x k , поэтому самое большее мы можно получить только такую ​​же минимальную сумму.

Это означает, что выбор (x 2n-k , x k ) дает нам минимальное количество пар.

предположим, что вместо этого мы объединяем x k в пару с некоторым другим x 2n-j для j 2n-j + x k > = x 2n-k + x k , поэтому самое большее мы можно получить только такую ​​же минимальную сумму.

Это означает, что выбор (x 2n-k , x k ) дает нам минимальное количество пар.

предположим, что вместо этого мы объединяем x k в пару с некоторым другим x 2n-j для j 2n-j + x k > = x 2n-k + x k , поэтому самое большее мы можно получить только такую ​​же минимальную сумму.

Это означает, что выбор (x 2n-k , x k ) дает нам минимальное количество пар.

3
ответ дан 4 December 2019 в 15:21
поделиться

Я думаю, что могу доказать это для последовательности без повторяющихся чисел, и читателю должно быть достаточно простым упражнением, чтобы распространить доказательство на неуникальные последовательности.

Пара x 0 , x 2n вместе, затем объедините все остальные числа в пары согласно оптимальному решению.

Теперь рассмотрим объединение (x 0 , x ] 2n ) против любой другой пары x y , x z из оптимального подмножества. x 2n + либо x y , либо x z будет больше, чем x y + x z , а также x 2n + x 0 , поэтому спаривание x 2n , x 0 было оптимальным.

Доказательство теперь расширяется на индукция к спариванию X 1 ,

1
ответ дан 4 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: