Сообщение Re[5]: Сортировка по арифметическому среднему от 02.11.2022 16:24
Изменено 02.11.2022 16:26 Sharowarsheg
Re[5]: Сортировка по арифметическому среднему
Здравствуйте, scf, Вы писали:
scf>node1 A1 A2 B1 C3
scf>node2 A6 B1 C1 D4
scf>Если посчитать арифметическое среднее и отсортировать, получится D4 A3 C2 B1, итого результат — D4 A3. Вопрос — как получить этот результат, не перекачивая всё содержимое второй ноды на первую.
О, вот так понятно.
Я бы думал что-то о том, что нужно посчитать сначала ноды отдельно
Получим
C = 3; 1
A = 1.5; 2
B = 1; 1
и
A = 6; 1
D = 4; 1
B = 1; 1
C = 1; 1
нужно ещё отслеживать количество элементов, чтобы можно было среднее по двум нодам считать
После этого будем брать по одной с каждой стороны и обсчитывать её (на практике, конечно, пачками, чтобы число пересылок уменьшить, но пока по одной), и складывать в массив с результатами (а в результатах количество элементов уже не нужно)
C = 2; пусто
потом
A = 3; C = 2
потом
D = 4; A = 3
и тут бы остановиться, но я не понимаю, какой критерий остановки.
критерий остановки в этом случае может быть такой, что на каждой стороне следующее значение (1) меньше, чем минимальное среднее из результата (что означает, что гарантированно не будет новых победителей), но насколько это позволит сэкономить пересылки, сильно зависит от данных.
scf>node1 A1 A2 B1 C3
scf>node2 A6 B1 C1 D4
scf>Если посчитать арифметическое среднее и отсортировать, получится D4 A3 C2 B1, итого результат — D4 A3. Вопрос — как получить этот результат, не перекачивая всё содержимое второй ноды на первую.
О, вот так понятно.
Я бы думал что-то о том, что нужно посчитать сначала ноды отдельно
Получим
C = 3; 1
A = 1.5; 2
B = 1; 1
и
A = 6; 1
D = 4; 1
B = 1; 1
C = 1; 1
нужно ещё отслеживать количество элементов, чтобы можно было среднее по двум нодам считать
После этого будем брать по одной с каждой стороны и обсчитывать её (на практике, конечно, пачками, чтобы число пересылок уменьшить, но пока по одной), и складывать в массив с результатами (а в результатах количество элементов уже не нужно)
C = 2; пусто
потом
A = 3; C = 2
потом
D = 4; A = 3
и тут бы остановиться, но я не понимаю, какой критерий остановки.
критерий остановки в этом случае может быть такой, что на каждой стороне следующее значение (1) меньше, чем минимальное среднее из результата (что означает, что гарантированно не будет новых победителей), но насколько это позволит сэкономить пересылки, сильно зависит от данных.
Re[5]: Сортировка по арифметическому среднему
Здравствуйте, scf, Вы писали:
scf>node1 A1 A2 B1 C3
scf>node2 A6 B1 C1 D4
scf>Если посчитать арифметическое среднее и отсортировать, получится D4 A3 C2 B1, итого результат — D4 A3. Вопрос — как получить этот результат, не перекачивая всё содержимое второй ноды на первую.
О, вот так понятно.
Я бы думал что-то о том, что нужно посчитать сначала ноды отдельно
Получим
C = 3; 1
A = 1.5; 2
B = 1; 1
и
A = 6; 1
D = 4; 1
B = 1; 1
C = 1; 1
нужно ещё отслеживать количество элементов, чтобы можно было среднее по двум нодам считать
После этого будем брать по одной с паре каждой стороны (берем первый ключ с первой ноды, и соответствующее ему данное со второй, а потом наоборот, а потом второй ключ с первой, и так далее) и обсчитывать её (на практике, конечно, пачками, чтобы число пересылок уменьшить, но пока по одной), и складывать в массив с результатами (а в результатах количество элементов уже не нужно)
C = 2; пусто
потом
A = 3; C = 2
потом
D = 4; A = 3
и тут бы остановиться, но я не понимаю, какой критерий остановки.
критерий остановки в этом случае может быть такой, что на каждой стороне следующее значение (1) меньше, чем минимальное среднее из результата (что означает, что гарантированно не будет новых победителей), но насколько это позволит сэкономить пересылки, сильно зависит от данных.
scf>node1 A1 A2 B1 C3
scf>node2 A6 B1 C1 D4
scf>Если посчитать арифметическое среднее и отсортировать, получится D4 A3 C2 B1, итого результат — D4 A3. Вопрос — как получить этот результат, не перекачивая всё содержимое второй ноды на первую.
О, вот так понятно.
Я бы думал что-то о том, что нужно посчитать сначала ноды отдельно
Получим
C = 3; 1
A = 1.5; 2
B = 1; 1
и
A = 6; 1
D = 4; 1
B = 1; 1
C = 1; 1
нужно ещё отслеживать количество элементов, чтобы можно было среднее по двум нодам считать
После этого будем брать по одной с паре каждой стороны (берем первый ключ с первой ноды, и соответствующее ему данное со второй, а потом наоборот, а потом второй ключ с первой, и так далее) и обсчитывать её (на практике, конечно, пачками, чтобы число пересылок уменьшить, но пока по одной), и складывать в массив с результатами (а в результатах количество элементов уже не нужно)
C = 2; пусто
потом
A = 3; C = 2
потом
D = 4; A = 3
и тут бы остановиться, но я не понимаю, какой критерий остановки.
критерий остановки в этом случае может быть такой, что на каждой стороне следующее значение (1) меньше, чем минимальное среднее из результата (что означает, что гарантированно не будет новых победителей), но насколько это позволит сэкономить пересылки, сильно зависит от данных.