k = []
i = int(raw_input('enter the number of values in the list '))
l = 0
while l < i:
p = raw_input('enter the string ')
k.append(p)
l= l+1
print "list is ", k
Можно организовать прямоугольники в четверке или kd-дереве. Это дает Вам O (зарегистрируйте n). Это - основной метод.
Другой интересной структурой данных для этой проблемы являются R-деревья. Они могут быть очень эффективными, если необходимо иметь дело с большим количеством прямоугольников.
http://en.wikipedia.org/wiki/R-tree
И затем существует O (1) метод простой генерации битового массива в том же размере как Ваш экран, заполните его заполнителем для "никакого прямоугольника" и вовлеките индексы прямоугольника хита в тот битовый массив. Поиск становится столь же простым как:
int id = bitmap_getpixel (mouse.x, mouse.y)
if (id != -1)
{
hit_rectange (id);
}
else
{
no_hit();
}
Очевидно, тот метод только работает хорошо, если Ваши прямоугольники часто не изменяют это и если можно сэкономить память для битового массива.
Создайте Дерево Интервала. Запросите Дерево Интервала. Консультируйтесь с 'Алгоритмами' из нажатия MIT.
Дерево Интервала лучше всего реализовано как Красно-черное Дерево.
Следует иметь в виду, что только желательно отсортировать Ваши прямоугольники, если Вы собираетесь быть нажатием в них больше затем, Вы меняете их положения, обычно.
Необходимо будет иметь в виду, что у Вас есть сборка сборки Ваши индексы для другой оси отдельно. Например, необходимо видеть, перекрываете ли Вы интервал на X и на Y. Одна очевидная оптимизация должна только проверить на перекрытие на любых X интервалах, затем сразу проверить на перекрытие на Y.
Кроме того, большая часть запаса или Деревьев Интервала 'учебника' только проверяют на единственный интервал и только возвращают единственный Интервал (но Вы сказали, что "неналожение" не сделало Вас?)
Используйте дерево BSP для хранения прямоугольников.