Какой из них занимает меньше тактов процессора для выполнения? Формула Пифагора или 16 сравнений среди целых в предложении "если"?
Ответ Aprox достаточно. Я предполагаю проверить, перекрываются ли 2 прямоугольника одинакового размера или нет. 1) Существующий код проверяет, все ли (x,y) одного прямоугольника соответствуют всем (x,y) другого. Итак, проведено 16 сравнений. 2) Мое улучшение - Вычисление расстояния между верхним левым углом каждого прямоугольника и проверка, меньше ли это расстояние, чем диагональ прямоугольника.
Также ценится любая книга / материал, в котором обсуждается количество тактовых циклов ЦП / время, которое требуется каждой операции в кодировании для однократного выполнения на ЦП.
1 ответ
Это в основном зависит от вашего приближения квадратного корня. Регулярное приближение определенно будет медленнее, просто из-за точности (и, следовательно, итераций), которую оно обеспечивает.
Учитывая, что ваши прямоугольники кажутся довольно маленькими, самым быстрым алгоритмом будет простой поиск: сохраните все возможные квадратные корни в словаре и выполните поиск.
Если это не то, что вам нужно, вы можете искать другой алгоритм (ищите приближения квадратных корней или встроенные алгоритмы для получения квадратных корней). Затем вы должны рассчитать необходимые итерации и, следовательно, сложность.
Вот ссылка на похожий вопрос с некоторыми эмпирическими приближениями:
https://gamedev.stackexchange.com/questions/27196/which-opcodes-are-faster-at-the-cpu-level