Скорее всего, вы не сможете хранить значения спектров (x, y) и разумно извлекать их по точным значениям с плавающей точкой x и у . В реальной жизни вы редко встречаетесь с одинаковыми значениями с плавающей запятой.
Обратите внимание, что я не думаю, что вы можете кэшировать f
напрямую, потому что это зависит от длинного списка чисел с плавающей запятой. Его возможное пространство для ввода настолько велико, что найти близкое совпадение мне кажется невероятным.
Если вы кешируете значения spectra()
, вы можете получить значение для достаточно близкой пары аргументов с разумной вероятностью.
Проблема в поиске таких близких пар. Хеш-таблица не может работать (нам нужны неточные совпадения), упорядоченный список и двоичный поиск также не могут работать (у нас есть 2 измерения). Я бы использовал четырехугольное дерево или какую-то другую форму пространственного индекса . Вы можете построить его динамически и эффективно искать ближайшие известные точки вблизи заданной точки.
Если вы нашли кешированную точку, действительно близкую к той, которая вам нужна, вы можете просто вернуть кешированное значение. Если ни одна точка не находится достаточно близко, вы добавляете ее в индекс, в надежде, что она будет использоваться повторно в будущем. Возможно, вы могли бы даже интерполировать, если ваша точка находится между двумя известными точками рядом.
Большое предварительное условие , конечно, заключается в том, что достаточное количество точек в кеше может быть использовано повторно. Чтобы оценить это, запустите некоторые из своих расчетов и сохраните где-нибудь пары (mE, a)
(например, в файле), а затем нанесите их на график. Вы сразу увидите, есть ли у вас группы точек, близкие друг к другу. Конечно, вы также можете искать узкие кластеры без черчения. Если у вас достаточно узких кластеров (где вы можете повторно использовать значение одной точки для другой), ваш кэш будет работать. Если нет, не беспокойтесь о его реализации.