Это просто - нужно уметь обращать строку-формулу.
Скажем, обратной для функции Roots(ax^2+bx+c)=Set(5,4) будет функция Equation(5, 4, ax^2+bx+c). Ну дальше a, b, c ищутся по формуле Лагранжа для интерполяции.
То есть, если у нас сгенерена прямая задача min(Roots(ax^2+bx+c)) = 5, мы ее обращаем
min(Roots(ax^2+bx+c)) = 5
Roots(ax^2+bx+c) = Set(5, 5+ random())
Equation(5, 5+random(), ax^2+bx+c) - > считаем A, B, C, подставляем в исходное уравнение
Чем больше таких функций и их обращений насочиняете, тем богаче будет задачник.
xmoonlight, ну, начните примерно с этой бодяги. Кстати, арифметику тоже можно засунуть в функции, чтобы не смешивать арифметическую запись с функциональной.
Тогда получится Min(Roots(sum(sub(pow(x, 2), mul(2,x)),4)))
Сложно будет из формального языка переводить задачу на естественный, они будут звучать очень топорно.
Так как множество задач у нас будет получаться закрытым, это вполне реализуемая вещь. Только долго возиться придется. Понадобится еще система компьютерной алгебры, чтобы решать такие задачи. Ну, тут можно Maxima взять.
Для первого шага, можно начать с генерации арифметических примеров.
Потом накинуть сюда теоретико-множественные задачки.
Ввести понятие, например, функтора, который жрет уравнение и выдает множество его корней.
Тогда добавить еще функтор, который из множества берет минимум
Нагенерить что-то вроде Min(Roots(x^2-2x+4)) - вот и задачка получилась
xmoonlight, сначала нужен пример того, что считать разными типами задач. В школьной арифметике, например, 3+5= и 7 * (2+1) = -это примеры из разных учебников, за разные годы обучения.
xmoonlight, ну как сказать. Теоретически, как учат нас Основания математики, любая математическая задача (логика входит в математику), это просто текст на специальном языке (о самом языке - см. одноименную книгу Гильберта).
Тексты можно генерировать цепями Маркова. Но при этом, нужно результат проверять на осмысленность.
12rbah, Универсального алгоритма на все случаи жизни нет.
Задача в вашей постановке оторвана от реальности. Вполне возможно, что это удаление дубликатов по итогу занимает 1% от времени работы программы, и лучший выигрыш можно получить, оптимизировав хранение этих данных.
Все зависит от того, какие строки (какой длины), сколько их, сколько у вас ресурсов на реализацию, как строки хранятся изначально, в какой они кодировке.
Begginer_serg, вы прочитали объяснения, которые вам дали я и другие люди? Данный вопрос уже примерно 30 лет (i486 появился в 1989 году) не актуален, так как процессоры стали гораздо более сложными, и время выполнения того или иного куска кода стало зависеть от очень большого количества факторов, уследить за всей совокупностью которых - задача, сложность которой превосходит практический выхлоп от этого.
Если вы хотите достойно сдать лабораторку, вы можете написать длинное-длинное эссе на тему того, что процессоры за 30 лет шагнули сильно вперед (а ваш препод - нет), и получить актуальные знания. Вы можете найти писюк с i386 - последним из могикан, который был настоящим CISC, и не конвертировал свои инструкции в RISC - и таки сделать на нем честные замеры, включая и отключая кэш, например.
Begginer_serg, к сожалению для вас, благодарность мне за выполнение вместо вас лабораторки, устаревшей примерно на 30 лет, измеряется в долларах по очень невыгодному курсу. Контакты в профиле, если надумаете.
Begginer_serg, Вам уже два специалиста, в том числе и я, сказали, что вы пытаетесь решить нерешаемую задачу, по причине запредельной сложности изучаемого вами объекта.
Если вы возьмете процессор попроще, например, AVR восьмибитный, там прямо в даташите будет прописано, какая инструкция сколько тактов выполняется.
Современный Интел, который снаружи CISC, а унутре RISC - не имеет четкой связи между инструкциями и временем их исполнения, так как перегоняет при помощи встроенного в процессор транслятора все вот эти mov, в свои внутренние RISC инструкции. Так что тут непонятно даже, что считать тактом. Потому что пока процессор проскочит одну инструкцию, он может нащелкать сотню внутренних тактов. А при следующем выполнении той же инструкции, он дернет данные из кэша и прождет всего два такта. Какой результат будем брать?
АртемЪ, Выставить голый RDP в Интернет без авторизации по клиентскому сертификату - это очень плохая идея. А с учетом наличия дыр вроде этой - просто вредная.
Скажем, обратной для функции Roots(ax^2+bx+c)=Set(5,4) будет функция Equation(5, 4, ax^2+bx+c). Ну дальше a, b, c ищутся по формуле Лагранжа для интерполяции.
То есть, если у нас сгенерена прямая задача min(Roots(ax^2+bx+c)) = 5, мы ее обращаем
min(Roots(ax^2+bx+c)) = 5
Roots(ax^2+bx+c) = Set(5, 5+ random())
Equation(5, 5+random(), ax^2+bx+c) - > считаем A, B, C, подставляем в исходное уравнение
Чем больше таких функций и их обращений насочиняете, тем богаче будет задачник.