Возник такой вопрос. Есть n частиц(много

). Вероятность столкновения велика. Есть теоритически бесграничное поле. Есть
статья, где достаточно хорошо описан метод для поиска соседей(там всё поле разбивается на ячейки нужного нам размера, ну и всё такое. Хз как называется этот метод).
Всё бы хорошо, но все моменты, где применяется запись и поиск в объекте разных значений очень тормозит. Есть ли идеи, как сделать хранение бесконечного количества ячеек не в переменной Object, а в другом быстром виде, чтобы избавиться от всех длинных циклов?
Вот примерно мой код:

Код AS3:
all_sectors=new Object();
for (i=0; i<ptCount; i++)
{
p=pt[i];
for (dx=-1; dx<=1; dx+=1)
for (dy=-1; dy<=1; dy+=1)
{
x1 = p.xx*rinv - dx; //rinv=1/радиус частицы
y1 = p.yy*rinv - dy;
s = Math.floor(x1)+"_"+Math.floor(y1);
if(! all_sectors[s])
all_sectors[s] = new Object();
all_sectors[s][i]=p;
}
... //Ещё кое-какой код
}
for(s in all_sectors)
{
sector=all_sectors[s];
for(su in sector)
{
i=parseInt(su);
for(sv in sector)
{
j=parseInt(sv);
if(i>j)
{
//До сюда при тестировании выполнение дошло примерно 5000 раз
....
Спасибо