В современных многоуровневых компьютерных системах на основе кэша пространственная локальность является важным фактором оптимизации времени доступа к элементам данных.
Проще говоря, это означает, что если вы обращаетесь к элементу данных в памяти, то доступ к другому элементу данных в памяти, который находится поблизости (имеет адрес, близкий к первому), может быть дешевле на несколько порядков, чем доступ к данным элемент, который находится далеко.
Когда к 1-м данным обращаются последовательно, как при простой обработке изображений или обработке звука, или итерируя по структурам данных, обрабатывая каждый элемент одинаковым образом, то расположение элементов данных в памяти имеет тенденцию к достижению пространственной локализации - т.е. Вы получаете доступ к элементу N + 1 сразу после доступа к элементу N, эти два элемента должны быть размещены рядом друг с другом в памяти.
Стандартные массивы c (и многие другие структуры данных) обладают этим свойством.
Смысл упорядочения Мортона заключается в поддержке схем, в которых к данным обращаются два по размерам вместо один по размерам. Другими словами, после доступа к элементу (x, y) вы можете перейти к доступу (x + 1, y) или (x, y + 1) или аналогичному.
Порядок Мортона означает, что (x, y), (x + 1, y) и (x, y + 1) находятся рядом друг с другом в памяти. В стандартном многомерном массиве c это не обязательно так. Например, в массиве myArray [10000] [10000], (x, y) и (x, y + 1) расположены на расстоянии 10000 элементов - слишком далеко друг от друга, чтобы использовать преимущества пространственной локализации.
В порядке Мортона стандартный массив c все еще может использоваться в качестве хранилища данных, но вычисление для определения, где (x, y) больше не так просто, как store [x + y * rowize] .
Чтобы реализовать ваше приложение с использованием упорядочения Мортона, вам необходимо выяснить, как преобразовать координату (x, y) в адрес в магазине. Другими словами, вам нужна функция f(x,y)
, которую можно использовать для доступа к магазину, как в store[f(x,y)]
.
Похоже, вам нужно провести еще какое-то исследование - перейдите по ссылкам со страницы википедии, особенно по ссылкам на функцию BIGMIN
.