Решение ^3 + b^4 = c^3 + d^3 наилучшего времени выполнения
Примечание: этот вопрос отличается от " Напишите все решения для a^3 + b^3 = c^3 + d^3", потому что мне нужна помощь в понимании времени выполнения алгоритма, а не его алгоритма.
В "Взломе кодирования", 6-е издание, стр. 69, есть следующий пример:
Выведите все положительные целочисленные решения уравнения a^3 + b^3 = c^3 + d^3, где a, b, c, d - целые числа от 0 до 1000.
Вот данное оптимальное решение:
1 n = 1000
2 for c from 1 to n:
3 for d from 1 to n:
4 result = c^3 + d^3
5 append(c, d) to list at value map[result]
6 for each result, list in map:
7 for each pair1 in list:
8 for each pair2 in list:
9 print pair1, pair2
Книга утверждает, что время выполнения равно O(n^2).
Однако я не уверен, как ограничить сложность строк 6-9. Я вижу, что строки 6-7 перебирают n ^ 2 чисел, но я не вижу, как последний цикл for в строке 8 может быть постоянным временем для общего времени выполнения O(n^2).
На самом деле, я вообще не могу придумать ограничение для строки 8, потому что это зависит от длины каждого списка, который я могу сказать только меньше, чем n^2, что делает все это O(n^4),
Может ли кто-нибудь просветить меня?
0 ответов
Мое решение на с #
var hash = new Hashtable();
for (int i = 1; i <= n; i++)
{
for (int j = i + 1; j <= n; j++)
{
var value = Math.Pow(i, 3) + Math.Pow(j, 3);
if (hash.Contains(value))
Console.WriteLine(string.Format("{0},{1},{2}", hash[value], i, j));
else hash.Add(value, i + "," + j);
}
}