Отображение ряда 3D точек к другому набору с минимальной суммой расстояний

Из вопроса OP, проблема была с использованием смещения в буфере.

Javadoc для DataOutputStream.write (выделение выделено)

public void write (byte [] b, int off, int len) выдает IOException

Записывает len байтов из указанного массива байтов , начиная со смещения off , в базовый выходной поток. Если исключение не выдается, записанный счетчик увеличивается на len.

blockquote>

Итак, java.lang.IndexOutOfBoundsException был результатом этой строки:

DOS.write(buf, k*1000, buf.length); 

Всегда используя «0» для смещения, .write(...) запишет количество байтов (в этом случае длина буфера), начиная с со смещения (которое должно быть 0). ОП всегда приятно переполнял буфер в каждой итерации цикла.

Таким образом, изменение на что-то вроде:

for( k=0;k<100;k++) {
  buf=bufferFiller( buf);         
  DOS.write(buf, 0, buf.length); 
  acc++;
}

должно решить проблему.

8
задан mafu 12 June 2016 в 12:26
поделиться

3 ответа

Первое, что пришло на ум, пространственный вид, сопровождаемый моделируемым отжигом.

Сетка пространство и сортирует наборы в пространственные ячейки.

Решите O (NM) проблема в каждой ячейке, затем в окружениях ячейки, и так далее, для получения испытательного соответствия.

Наконец, выполните много циклов моделируемого отжига, в котором Вы случайным образом изменяете соответствия, чтобы исследовать соседнее пространство.

Это - эвристика, получая Вас хороший ответ, хотя не обязательно лучшее, и это должно быть довольно эффективно из-за начального вида сетки.

1
ответ дан 5 December 2019 в 23:17
поделиться

Одним путем Вы могли приблизиться, эта проблема состоит в том, чтобы рассматривать, как классическая проблема присвоения: http://en.wikipedia.org/wiki/Assignment_problem

Вы рассматриваете точки как вершины графика, и веса краев являются расстоянием между точками. Поскольку самые быстрые алгоритмы предполагают поиск максимума, соответствующего (и не минимальные как в случае), и что веса являются неотрицательными, можно переопределить веса, чтобы быть, например:

weight(A, B) = bigNumber- distance(A,B)

где bigNumber больше, чем Ваше самое долгое расстояние.

Очевидно, Вы заканчиваете с биграфом. Затем Вы используете один из стандартных алгоритмов для максимального взвешенного двустороннего соответствия (много ресурсов в сети, например, http://valis.cs.uiuc.edu/~sariel/teach/courses/473/notes/27_matchings_notes.pdf или Википедия для обзора: http://en.wikipedia.org/wiki/Perfect_matching#Maximum_bipartite_matchings) Этот способ, которым Вы закончите с O (NM макс. (N, M)) алгоритмы, где N и M являются размерами Ваших наборов точек.

3
ответ дан 5 December 2019 в 23:17
поделиться

Хотя у меня действительно нет ответа на Ваш вопрос, я могу предложить изучить следующие темы. (Я знаю очень мало об этом, но встретился с ним ранее на Переполнении стека.)

Надежда это помогает немного.

1
ответ дан 5 December 2019 в 23:17
поделиться
Другие вопросы по тегам:

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