2013-10-06 2 views
4

Экземпляр размера n делится на p≥2 экземпляров каждого размера n-a, где a является небольшой integer и p является constant. Расчетная стоимость этой операции (т. Е. Деление на экземпляры) представляет собой единицу, с C(0)=1.Сложность неэффективного разделяй и властвуй алгоритм

Я пытаюсь найти сложность этого проекта. У меня возникли проблемы положить слова в уравнение, вот что я думаю, что рекурсия должна выглядеть следующим образом:

C(n) = (n-a)*C(n/p) + 1 

это правильно?

+0

Нет, это не так. Прочтите проблему еще раз и определите количество созданных подзадач и размер каждой подзадачи. В настоящее время это неверно в уравнении. – naitoon

+1

Помните, что формула: C (размер) = (количество подзадач) * C (размер подзадачи) + (стоимость деления). Вы все это знаете, просто интерпретируйте формулу правильно. Я не буду отвечать на вопрос напрямую, я ожидаю, что вы это сделаете. – naitoon

+0

Также знайте, что если никто не ответит, и вы это сделаете, вы сможете ответить на свой вопрос. Если вы это сделаете, обязательно дайте подробное объяснение вместе с вашим ответом. – BlackVegetable

ответ

1

Я думаю, что это будет что-то вроде этого:

C(n) = (p)*C(n-a) + 1 

Мое объяснение в том, что вы сказали «p≥2 экземпляры каждого размера п-а» в вашем вопросе. Таким образом, размер уменьшается до C(n-a) и есть p подзадач. Поэтому я думаю, что это будет что-то вроде p*C(n-a). У вас есть другой термин. Стоимость деления на каждом шаге составляет C(0) = 1, как вы сказали.

+0

hmmm ... это то, что я думаю сейчас, но будет ли это сложной экспоненциальной в n ... продолжая пробовать это. – dood

+0

Ну, вы упомянули слово «неэффективно» в своем названии. Возможно, это и есть цель этой проблемы, чтобы показать, что с Divide и Conquer возможна почти экспоненциальная временная сложность. – Shashank

0

Ну, так как это выглядит как школьное задание, особенно из-за формулировки «неэффективный алгоритм разделения и покорения», я не буду отвечать на него напрямую.

В качестве примера я бы посоветовал использовать a=1 и p=2. В этом случае вам нужно решить две подзадачи размером n-1, а затем потратьте 1 единицу времени на объединение решений. Если это займет у вас 1 единицу времени, чтобы решить для n=1, т.е. C(1)=1, то вы получите

C(1)=1 
C(2) = 2*C(1) + 1 = 3 
C(3) = 2*C(2) + 1 = 7 
C(4) = 2*C(3) + 1 = 15 

и т.д. Таким образом, вы получите C(n) =2^n - 1. Если a не 1, это в основном то же самое: вы просто поднимете до уровня n/a вместо n.

Кстати, не странно ли вы называть a «маленьким целым», тогда как p является «константой»? Конечно, оба выражения означают одно и то же. Все константы «малы», что касается асимптотического поведения.

+0

Я согласен, что формулировка немного странная ... Я обнаружил, что сложность - это C (n) = p^(n/a) + [(p^(n/a) - 1)/(p - 1)], которая была бы большой O (p^n), которая экспоненциальна. – dood

+0

Можете ли вы показать свою работу для этого? @ user2321926 – eggie5

0

Как писал Шашанк, C (n) = p⋅C (n-a) + 1 является правильным.

Я просто хочу сказать, что это приводит к

С (п) = S я = 0, ..., п/ар я = р п/а + 1 - 1

Так с (п) в O (р н/), который является экспоненциальной в п.