нужно предложение реализовать БИНАРНЫЙ ПОИСК для массива, который содержит значения cgrect - PullRequest
0 голосов
/ 06 мая 2011

Я пытаюсь немного изменить свой код для поиска.мой работающий код ниже

for(int i=0;i<[wordRects count];i++){

     if(CGRectContainsPoint([[wordRects objectAtIndex:i] CGRectValue], tapedPoint)){

        lineImage=[[UIImageView alloc] initWithFrame:[[wordRects objectAtIndex:i]CGRectValue]];
        lineImage.backgroundColor=[[UIColor blueColor] colorWithAlphaComponent:0.3f];
        [textSelectionView addSubview:lineImage];
        break;    
    }
}

В приведенном выше коде массив wordRects содержит приблизительно 500 ритов, а точка нажатия - это точка касания пользователя в представлении.если пользователь записал точку не в массиве, то в худшем случае произойдет 500 итераций.* Мои требования * Я хочу сократить количество итераций с помощью алгоритма бинарного поиска. Есть ли какая-либо возможность реализовать это, если да, то можно ли изменить код в соответствии с бинарным поиском или дать мне некоторую идею для реализацииЭто. Спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 29 ноября 2012

Один из самых простых и мощных способов получить хорошую производительность при проверке границ - это использовать деревья пространственного разбиения или иначе называемые деревья пространственного индексирования, точнее, QuadTree , поскольку канаты - это 2D-структуры.1003 *

0 голосов
/ 06 мая 2011

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

0 голосов
/ 06 мая 2011

Если вы получили правду для своего утверждения if, делайте что хотите и просто return;. Это остановит ненужные итерации.

Если хотите, можете попробовать CFArrayBSearchValues ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...