You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求数组的数组的笛卡尔积的时间复杂度(附Java实现代码)

分析笛卡尔积计算代码的时间复杂度

让我们一步步拆解这段Java代码的时间复杂度,先搞清楚代码的核心逻辑:

这段代码的目标是生成多个字符串数组的笛卡尔积并打印出来,主要分为两个核心步骤:

1. 计算总组合数

第一个for循环遍历输入的所有集合(sets数组),将每个集合的长度相乘,得到笛卡尔积的总组合数combinations。假设输入有n个集合,这个循环会执行n次,时间复杂度是 O(n)。

2. 生成并打印每个组合

外层for循环会执行combinations次(也就是笛卡尔积的总元素个数),每次循环内部又会遍历所有n个集合,通过计算(i/j)%set.length来定位当前组合中每个集合对应的元素,然后打印。

这里的关键是:

  • 外层循环次数 = 总组合数C = k₁ * k₂ * ... * kₙ(其中kᵢ是第i个集合的元素数量)
  • 内层每次循环执行n次操作

所以这部分的时间复杂度是 O(C * n)。

总时间复杂度

把两部分加起来,总时间复杂度是O(n + C * n)。由于笛卡尔积的总组合数C通常远大于集合的数量n(比如示例中n=3,C=27),O(n)的部分可以忽略不计,最终时间复杂度简化为:

O(n * k₁ * k₂ * ... * kₙ)

举个实际例子:示例中输入3个各含3个元素的集合,总组合数是27,总操作数大概是3 + 27*3 = 84,和O(3*27)=O(81)的量级完全匹配。

内容的提问来源于stack exchange,提问作者mounika's diary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:44:46