Иван Бессонов @ibessonov
Математик, программист
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Пишу базу данных
Lead
Java
High-loaded systems
Математик, программист
Действительно интересный вопрос, я бы тоже рад был знать ответ. Мне вообще не понятно, как можно адекватно оценить трудоёмкость описанного алгоритма.
Сразу можно сказать одно — чем больше будет размерность, тем больше будет погрешность вычислений на последнем этапе, поскольку коэффициенты am экспоненциально растут по мере нахождения ответа. Рано или поздно мы выбьемся из точности double, после этого ни о какой эффективности и говорить не стоит.
Некоторые более простые методы хорошо описаны в этой статье: https://habrahabr.ru/post/173795/
А вот насчёт генерации лично я ничего подсказать не смогу.
Сложно сказать с уверенностью.
Для простых судоку время слишком мало, чтобы заметить невооружённым глазом. Для сложных перебор находит решение намного быстрее.
Спасибо!
Получается трюк в том, что пока мы какие-нибудь свойства класса не попросим, его как бы и нет? Для меня это действительно неожиданное свойство.
Что же касается лямбд — если верить коду InnerClassLambdaMetafactory, то всегда будет вызван либо
innerClass.getDeclaredConstructors()
, либоUNSAFE.ensureClassInitialized(innerClass)
, так что пример в моём вопросе ещё более непоказателен, чем казалось.Разрешите уточнить насчёт Unsafe#defineAnonymousClass. Чем они легковеснее?
Запускаю я вот такой код:
и получаю sun.misc.Launcher$AppClassLoader@1b6d3586 — вполне себе ClassLoader. Или дело тут в чём-то другом?
Всё верно, для методов Object этот код совершенно не годится.
Боюсь даже предположить. Вообще было бы удобно иметь такой универсальный инструмент, когда тебе в коде нужно получить конкретный метод конкретного класса.
getDeclaredMethod это конечно хорошо, но не так синтаксически красиво, как явная ссылка на метод через ::
А подход с пулом костант хорош!
Правда у меня есть одно замечание — брать первый попавшийся метод некорректно, там может быть что-угодно (например java.lang.Integer.valueOf(int), используемый для боксинга). Во всяком случае мне неизвестно, всегда ли нужный метод будет встречаться первым. Нужен дополнительный анализ