LINUX.ORG.RU

История изменений

Исправление 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. Это ослабило селективность, но она осталась. Что бы полностью от неё избавиться, похоже что остаётся рандомизация исходного массива векторов.