Мое текущее исследование:
Начальная попытка некоторых общих правил
Можно попытаться составить несколько общих правил для решения рационального сравнения:
Предполагая все положительные :a,b,c,d
a<b∧c≥d⟹ab<cd
Это в основном означает, что если левая сторона меньше единицы, а правая сторона хотя бы одна, левая сторона меньше правой боковая сторона. В том же духе:
a≥b∧c≤d⟹ab≮cd
Еще одно правило:
(b>d)∧(a≤c)⇒[ab<cd]
Я считаю это правило логичным, поскольку чем больше знаменатель, тем меньше число, тем больше числитель, тем больше число. Следовательно, если левая сторона имеет больший знаменатель
и меньший числитель, левая сторона будет меньше.
С этого момента мы будем предполагать, что , потому что в противном случае мы можем либо решить его с помощью приведенных выше правил, либо изменить вопрос на , и мы все получим это условие.a<c∧b<dcd<?ab
Правила :
This Правило в основном гласит, что вы всегда можете вычесть числители из знаменателей и установить результаты в качестве числителей, чтобы получить эквивалентную задачу. Я опущу доказательства.
(b−a)b<(d−c)d⟺[ab<cd]∣∣∣a<c,b<d
ab<c−ad−b⟺[ab<cd]∣∣∣a<c,b<d
Это правило позволяет вычесть левый числитель и знаменатель из правого числителя и знаменателя для эквивалентной задачи.
И конечно же есть масштабирование:
akbk<cd⟺[ab<cd]∣∣∣a<c,b<d
Вы можно использовать масштабирование, чтобы сделать приведенные выше правила вычитания более значимыми.
Используя эти правила, вы можете поиграть с вещами, применять их многократно, в умных комбинациях, но есть случаи, когда числа близки и патологичны.
Применяя предыдущие правила, вы можете уменьшить все эти проблемы до:
ab<ap+qbp′+q′⟺ab<qq′∣∣∣a>q,b>q′
Иногда вы можете решить это прямо сейчас, иногда нет. Патологические случаи обычно имеют вид:
ab<cd∣∣a>c,b>d,c∈O(a),d∈O(b)
Затем вы переворачиваете это, и в результате получаете то же самое, только с немного меньшим. Каждое применение правил + флип уменьшает его на цифру / бит. AFAICT, вы не можете быстро решить ее, если не примените правила раз (один раз для каждой цифры / бита) в патологическом случае, сводя на нет их кажущееся преимущество.O(n)
Открытая проблема ??
Я понял, что эта проблема, кажется, сложнее, чем некоторые текущие открытые проблемы.
Еще более слабая проблема заключается в определении:
ad=?bc
И еще слабее
ad=?c
Это открытая проблема проверки умножения . Это слабее, потому что, если у вас был способ определения , тогда можно легко определить , дважды протестировав алгоритм, , . Если и то, и другое верно, вы знаете, что .ad<?bca d ? < b c b c ? < a d a d ≠ b cad=?bcad<?bcbc<?adad≠bc
Теперь была открытой проблемой, по крайней мере, в 1986 году:ad=?c
Сложность умножения и деления. Начнем с очень простого уравнения ax = b. При рассмотрении над целыми числами проверка его разрешимости и поиск решения x возможны путем целочисленного деления с остатком ноль. Для проверки заданного решения x будет достаточно целочисленного умножения, но это интересная открытая проблема, существуют ли более быстрые методы проверки.
- ARNOLD SCHÖNHAGE в решении уравнений с точки зрения вычислительной сложности
Очень интересно, что он также упомянул вопрос о проверке умножения матриц :
Также интересен вопрос, может ли проверка умножения матриц, т. Е. Проверка того, AB = G для данного C, возможна быстрее.
- ARNOLD SCHÖNHAGE в решении уравнений с точки зрения вычислительной сложности
С тех пор это было решено, и действительно можно проверить в время с помощью рандомизированного алгоритма (с являющимся размером входных матриц, так что это в основном линейное время в размер входа). Интересно, возможно ли свести целочисленное умножение к умножению матриц, особенно с их сходствами, учитывая сходство целочисленного умножения Карацубы с алгоритмами умножения матриц, которые последовали. Тогда, возможно, каким-то образом мы можем использовать алгоритм проверки матричного умножения для целочисленного умножения.n × nO(n2)n×n
Во всяком случае, поскольку, насколько мне известно, это все еще открытая проблема, более серьезная проблема обязательно открыт. Мне любопытно, будет ли решение проблемы проверки равенства иметь какое-либо отношение к проблеме проверки неравенства сравнения.ad<?cd
Небольшое изменение нашей проблемы будет, если дроби гарантированно будут сокращены до самых низких сроков; в этом случае легко сказать, если . Может ли это иметь какое-либо отношение к проверке сравнения для сокращенных фракций?ab=?cd
Еще более тонкий вопрос: что если бы у нас был способ протестировать , будет ли это распространяться на тестирование ? Я не понимаю, как вы можете использовать этот "оба пути", как мы использовали для .ad<?cad=?cad<?cd
Связанный:
Приблизительное распознавание нерегулярных языков конечными автоматами
Они делают некоторую работу по приблизительному умножению и рандомизированной проверке, которую я не полностью понимаю.
- math.SE: Как сравнить два умножения без умножения?
- Предположим, что нам было разрешено предварительно обработать столько, сколько мы хотели за полиномиальное время, можем ли мы решить за линейное время?cab=c
- Существует ли алгоритм недетерминированного целочисленного линейного времени? См. Http://compgroups.net/comp.theory/nondeterministic-linear-time-multiplication/1129399
Существуют хорошо известные алгоритмы умножения n-битных чисел на что-то вроде сложности O (n log (n) log (log (n))). И мы не можем сделать лучше, чем O (n), потому что, по крайней мере, мы должны смотреть на все входные данные. Мой вопрос: можем ли мы на самом деле достичь O (n) для подходящего класса "недетерминированных" алгоритмов?
Точнее, существует ли алгоритм, который может принимать два n-битных двоичных числа «a» и «b» и 2n-битное число «c» и сообщать вам за O (n) время «a * b = c»? Если нет, существует ли какая-либо другая форма сертификата C (a, b, c), чтобы алгоритм мог использовать его для тестирования продукта за линейное время? Если не линейное время, является ли проблема тестирования продукта, по крайней мере, асимптотически легче, чем его вычисление? Любые известные результаты в этом направлении приветствуются.
Джон.
-johnh4717