Об алгоритме анализа / производительности? - PullRequest
4 голосов
/ 14 ноября 2011

enter image description here

Как показано на рисунке, у меня есть следующие структуры для хранения набора шкафов "Кривые" в "Срез".«Кривая» состоит из «узлов», реализованных в виде двусвязного списка.

Вот код псевдо:

class Slice {
 List<Curve*> curves;
}

class Curve {
 int objectID;
 Node *headNode;
}

class Node {
 double x,
 double y,
 Node *next;
 Node *previous
}

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

То, что я делаю,

a). Получите каждую «Кривую» в «Срезе»

b). Идитечерез все узлы в выбранной кривой и вычислите расстояние от точки мыши до каждой точки и сравните.

Мои вопросы:

1) если мы возьмем число кривой "c" и средние узлыравен «n», сложность алгоритма равна O (n * c).Является ли этот анализ правильным?

2) Есть ли способ улучшить алгоритм, сделать его быстрее?Используя двоичное дерево, HashTable ..etc?

1 Ответ

3 голосов
/ 14 ноября 2011

1) Да, ваш анализ правильный

2) Вы можете получить логарифмическую сложность, используя поиск ближайшего соседа алгоритмы.проще всего, пожалуй, с использованием дерева kd

...