Как придумать алгоритм поиска свободных машин такси в радиусе координат пользователя?
В Базе есть тип геоданные простой запрос вам отдаст все машины в нужном радиусе. Но лучше пользоваться сервисом маршрутов. Поясню почему. Допустим вы стоите на правом берегу в Воронеже , и делаете запрос с 2 километровым радиусом, он захватит машины с левого берега, которым ещё доехать до моста а потом к вам.
В базах создаются специальные структуры данных и индексы к ним, которые позволяют эффективно выполнять запросы вида "какие объекты находятся на расстоянии не более R от точки (X,Y)?". Например, если для упрощения вместо круга взять квадрат, хорошо работает R-Tree. Реализация для SQLite.

Более серьезное решение для PostgreSQL: postgis.refractions.net

Что касается постоянного перемещения машин, можно делать так. Запросить машины в меньшем радиусе, которые точно не уедут далеко в ближайшее время. Если ничего не нашлось, тогда увеличить радиус поиска.