我想知道是否有O(n ^ 2)复杂度算法可用于生成数组的所有子序列。我知道一种算法,但是需要O((2 ^ n)* n)时间。
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Test1)
def create_test2(sender, instance, created, **kwargs):
Test2.objects.create(test1id=instance)
答案 0 :(得分:13)
否
不能简单地因为存在O(2^n)
个子序列而使算法复杂度低于O(2^n)
。您需要打印它们中的每一个,因此时间复杂度必须大于或等于O(2^n)
。
答案 1 :(得分:0)
您不能提高算法的复杂性,但是可以改善流的使用方式。
正如其他答案指出的那样,o(n * 2^n)
最好。
使用std::endl
时,您正在刷新流缓冲区。为了获得最佳性能,应在缓冲区已满时将其自身刷新。
由于每个子序列都必须很短(最多64个元素),这意味着您经常刷新流并严重影响性能。
因此,将std::endl
替换为'\n'
可以显着改善性能。
有助于提高流性能的其他技巧:
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
cin >> n;