Это почти наверняка не то, что искали ваши интервьюеры, но я бы предложил, просто чтобы посмотреть, что они сказали в ответ:
Я предполагаю, что все карты имеют одинаковый размер и строго прямоугольные, без отверстий, но они расположены случайным образом в смысле X, Y, а также произвольно ориентированы в смысле тета. Поэтому каждая карта характеризуется тройкой (x, y, theta) или, конечно, у вас также есть четверка угловых локаций. С помощью этой информации мы можем довольно просто провести анализ Монте-Карло.
Просто сгенерируйте произвольное количество точек на поверхности стола и определите, используя список, покрыта ли каждая точка какой-либо картой. Если да, сохраните это; если нет, выкинь это. Рассчитайте площадь карточек по отношению сохраненных баллов к общему количеству баллов.
Очевидно, что вы можете проверить каждую точку в O (n), где n - количество карт. Тем не менее, есть небольшая хитрая техника, которая, я думаю, применима здесь, и я думаю, что это ускорит процесс. Вы можете распределить по столу соответствующий размер сетки (в зависимости от размера карт) и предварительно обработать карты, чтобы выяснить, в каких сетках они могут находиться. (Вы можете переоценить, предварительно обработав карты как если бы они были круглыми дисками с диаметром, проходящим между противоположными углами.) Теперь создайте хэш-таблицу с ключами в качестве местоположений сетки, а содержимое каждого представляет собой любую возможную карту, которая может перекрывать эту сетку. (Карты появятся в нескольких сетках.)
Теперь каждый раз, когда вам нужно включить или исключить точку, вам не нужно проверять каждую карту, а только предварительно обработанные карты, которые могут находиться в сетке вашей точки.
Об этом методе можно сказать очень много:
- Вы можете довольно легко изменить его для работы с непрямоугольными картами, особенно если они выпуклые
- Вероятно, вы можете изменить его для работы с картами разного размера или формы, если вам нужно (и в этом случае геометрия действительно раздражает)
- Если вы проводите собеседование в месте, где проводятся научные или инженерные работы, им это понравится
- очень хорошо распараллеливается
- Это так здорово !!
С другой стороны:
- Это метод аппроксимации (но вы можете использовать его с любой точностью!)
- Вы находитесь в стране ожидаемого времени выполнения, а не детерминированного времени выполнения
- Кто-то может задать вам подробные вопросы о Монте-Карло
- Если они не знакомы с Монте-Карло, они могут подумать, что вы придумываете
Хотел бы я взять кредит на эту идею, но, увы, я взял ее из бумаги, вычисляющей площади поверхности белков на основе положения и размеров атомов в белках. (Та же самая основная идея, за исключением того, что теперь у нас была трехмерная сетка в 3-пространстве, и карты действительно были дисками. Мы проходили и для каждого атома, генерировали группу точек на его поверхности и смотрели, были ли они или нет Интерьер к любым другим атомам.)
РЕДАКТИРОВАТЬ: Мне приходит в голову, что исходная проблема предусматривает, что общая площадь стола намного больше, чем общая площадь карты. В этом случае соответствующий размер сетки означает, что большинство сеток должно быть незанятыми. Вы также можете предварительно обработать местоположения сетки, как только ваша хеш-таблица будет создана, и полностью исключить их, генерируя только точки внутри, возможно, занятых местоположений сетки. (В основном, выполняйте индивидуальные оценки MC для каждого потенциально перекрытого местоположения сетки.)