История изменений
Исправление thunar, (текущая версия) :
Ок, поясню. Есть массив векторов vecs[N], сожержащий скорости и координаты, каждый вектор можно привязать к узлу сетки {x,y}. Есть массив ids[nx,ny,M], который хранит (0..M) привязок узлов сетки к элементам массива vecs. Заполняю его, соответственно, обходя vecs и добавляя элементы в ids пока там есть место. Потом использую эти индексы как ссылки на «жертв», работая с ними по принципу LIFO («жертв», заведомо меньше M). Из-за этого получается что в ids пишутся в основном вектора из начала массива. Положение же в массиве векторов по алгоритмическим причинам связано со скоростями которые они кодируют, из-за этого получается селективность в выборе «жертв», а выбор должен быть равномерным.
Я пробовал сделать в два этапа: сначала считать сколько всего векторов соответствует каждому узлу сетки, пусть K[nx,ny]; затем кидать случайное число между R=(0..K) и записывать индекс если R<M. Это ослабило селективность, но она осталась. Что бы полностью от неё избавиться, похоже что остаётся только рандомизация исходного массива векторов.
Если можно что-то ещё придумать, то буду рад совету.
Исправление thunar, :
Ок, поясню. Есть массив векторов vecs[N], сожержащий скорости и координаты, каждый вектор можно привязать к узлу сетки {x,y}. Есть массив ids[nx,ny,M], который хранит (0..M) привязок узлов сетки к элементам массива vecs. Заполняю его, соответственно, обходя vecs и добавляя элементы в ids пока там есть место. Потом использую эти индексы как ссылки на «жертв», работая с ними по принципу LIFO («жертв», заведомо меньше M). Из-за этого получается что в ids пишутся в основном вектора из начала массива. Положение же в массиве векторов по алгоритмическим причинам связано со скоростями которые они кодируют, из-за этого получается селективность в выборе «жертв», а выбор должен быть равномерным.
Я пробовал сделать в два этапа: сначала считать сколько всего векторов соответствует каждому узлу сетки, пусть K[nx,ny]; затем кидать случайное число между R=(0..K) и записывать индекс если R<M. Это ослабило селективность, но она осталась. Что бы полностью от неё избавиться, похоже что остаётся рандомизация исходного массива векторов.
Исходная версия thunar, :
Ок, поясню. Есть массив векторов vecs[N], сожержащий скорости и координаты, каждый вектор можно привязать к узлу сетки {x,y}. Есть массив ids[nx,ny,M], который хранит (0..M) привязок узлов сетки к элементам массива vecs. Заполняю его, соответственно, обходя vecs и добавляя элементы в ids пока там есть место. Потом использую эти индексы как ссылки на «жертв», работая с ними по принципу LIFO. Из-за этого получается что в ids пишутся в основном вектора из начала массива. Положение в массиве векторов по алгоритмическим причинам связано со скоростями которые они кодируют, из-за этого получается селективность в выборе «жертв», а выбор должен быть равномерным.
Я пробовал сделать в два этапа: сначала считать сколько всего векторов соответствует каждому узлу сетки, пусть K[nx,ny]; затем кидать случайное число между R=(0..K) и записывать индекс если R<M. Это ослабило селективность, но она осталась. Что бы полностью от неё избавиться, похоже что остаётся рандомизация исходного массива векторов.