是否有O(n ^ 2)算法来生成数组的所有子序列?

时间:2018-07-06 15:04:32

标签: c++ arrays algorithm subsequence

我想知道是否有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)

2 个答案:

答案 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;