У меня есть алгоритм подсчета, для которого я пытаюсь получить общее описание большого o. Он ужасно вложен и ужасно экспоненциальен. Вот оно:Упрощение сложностей Big-O этого экспоненциального алгоритма
1. For each T_i in T
2. For k = 1 to max_k
3. For each of 2^k*(n choose k) items
4. For each t in T_i
5. check if the item is in t...etc.
Вот идея линия за линией каждого времени выполнения
- Это простое разделение и я собираюсь просто дать ему постоянную c1.
- max_k - небольшое число, всегда меньше n, возможно, около 4 или 5. Я буду использовать k ниже.
- Эта петля всегда работает 2^k * (n выбирает k) раз
- Рассматривая константу 1, мы можем обобщить эту строку и знать, что она не будет срабатывать больше, чем 2^n раз в общем случае в худшем случае, но обычно будет работать от 2^n раз, поэтому мы будем называть это (2^n)/c2
- Это простая операция if-statement внутри всех этих циклов, поэтому c3.
Умножив все это дает:
c1 * k * 2^k * (n choose k) * (2^n)/c2 * c3
Поскольку я хочу представление большой-O, игнорируя константы дает:
k * 2^k * (n choose k) * (2^n)
Известно, что (п выбирают к) ограничен выше: (n * e/k)^k, поэтому:
O(k * 2^k * (n * e/k)^k * (2^n))
Мой вопрос в том, wh я могу игнорировать здесь ... 2^n, безусловно, является доминирующим термином, так как n всегда больше k и, как правило, гораздо более. Можно ли это упростить до O (2^n)? Или O (2^ужасно)? Или оставить в 2^k, как и в O (2^k * 2^n)? (или оставить все условия в?)
Я понимаю, что если k или max_k могут конкурировать или превосходить n, то они жизненно важны. Но так как они всегда доминируют, их можно отбросить как члены младшего порядка полиномиального времени работы? Я предполагаю, что все экспоненциальные беспорядки времени путают меня. Любые советы высоко ценится.
+1 Сильный ответ ... – MoonKnight
Если верно, что n всегда больше k, это достаточно для ограничения k и, следовательно, его удаления? Я думаю, это то, что вы говорите, но я хочу быть уверенным. Ваш пример n * lg (k) совершенно ясен - спасибо за это. –
@Chucktown: «Если верно, что n всегда больше k, это достаточно для ограничения k и, следовательно, его удаления?» Нет. Когда мы говорим «k ограничено», мы имеем в виду, что существует * CONSTANT * 'c' такой, что 'k
amit