Я пытаюсь решить проблему на кодовых войнах и юнит-тесты, предусмотренные код делают абсолютно никакого смысла ...эффективность и точность
Проблемы не так и звучит абсолютно достаточно просто иметь что-то работает в 5 минуты
Consider a sequence u where u is defined as follows:
The number u(0) = 1 is the first one in u.
For each x in u, then y = 2 * x + 1 and z = 3 * x + 1 must be in u too.
There are no other numbers in u.
Ex: u = [1, 3, 4, 7, 9, 10, 13, 15, 19, 21, 22, 27, ...]
1 gives 3 and 4, then 3 gives 7 and 10, 4 gives 9 and 13, then 7 gives 15 and 22 and so on...
Task:
Given parameter n the function dbl_linear (or dblLinear...) returns the element u(n) of the ordered (with <) sequence u.
Example:
dbl_linear(10) should return 22
Сначала я использовал SortedSet с Linq запросом, как я действительно не забочусь об эффективности, я быстро понял, что эта операция будет вычислять диапазоны где п может равняться ~ 100000 в возрасте до 12 секунд.
Так что эта мерзость родилась, а затем снова и снова забивалась, так как цикл по какой-то причине создавал проблемы. Затем он был «обновлен» до цикла while, который дал несколько более отдаленные модульные тесты (4 -> 8).
public class DoubleLinear {
public static int DblLinear(int n) {
ListSet<int> table = new ListSet<int> {1};
for (int i = 0; i < n; i++) {
table.Put(Y(table[i]));
table.Put(Z(table[i]));
}
table.Sort();
return table[n];
}
private static int Y(int y) {
return 2 * y + 1;
}
private static int Z(int z) {
return 3 * z + 1;
}
}
public class ListSet<T> : List<T> {
public void Put(T item) {
if (!this.Contains(item))
this.Add(item);
}
}
С помощью этого кода он все еще терпит неудачу при вычислении сверх n = 75000, но проходит до 8 тестов.
Я проверил, прошли ли другие люди, и у них есть. Однако я не могу проверить, что они написали, чтобы учиться на нем.
Может ли кто-нибудь дать представление о том, что может быть неправильным здесь? Я уверен, что ответ откровенно очевиден, и я тупой.
Также использует пользовательский список таким образом, плохая идея? Есть ли способ лучше?
Должен ли я использовать C#/Linq для его решения? Я просто передал его с использованием C++ с совершенно другим подходом – shole
Предпочтительно C#, но не нужно linq. На данный момент меня больше интересуют причины, по которым он не работает – Grey
Это слишком медленно, так как это O (N^2). Он использует O (N) для проверки того, существует ли элемент в списке, прежде чем вставлять их. Мои принятые решения - O (N lg N) и O (N).O (N lg N) - это не что-то особенное, но схожая идея с вашей другой структурой данных, которая поддерживает O (lg N) find – shole