Java 什么';这段代码有多复杂?我必须用什么符号?
当我确定像这样的Java代码的复杂性时,我必须用θ或大O表示法来表示吗Java 什么';这段代码有多复杂?我必须用什么符号?,java,arraylist,complexity-theory,notation,Java,Arraylist,Complexity Theory,Notation,当我确定像这样的Java代码的复杂性时,我必须用θ或大O表示法来表示吗 List<Person> sortedPersons = new ArrayList<Person>(); List<Person> people = new ArrayList<Person>(); for (int i = 0; i < people.size(); i++) { Person toadd = people.get(i);
List<Person> sortedPersons = new ArrayList<Person>();
List<Person> people = new ArrayList<Person>();
for (int i = 0; i < people.size(); i++) {
Person toadd = people.get(i);
int index = 0;
while(index < sortedPersons.size() && sortedPersons.get(index).compareTo(toadd) < 0)
index++;
sortedPersons.add(index, toadd);
}
List sortedPersons=new ArrayList();
List people=new ArrayList();
for(inti=0;i
我知道for循环是O(n)(或者是\Theta(n)?)
get操作以恒定的时间运行,因此O(1)。
但是while循环呢?
sortedPersons.size():O(1)
sortedPersons.get():O(1)
比较运算是线性的吗?
我认为add操作也是在固定时间内运行的。
代码的总复杂度是多少?代码是O(n²)
如果你考虑数字,然后将它们从小到大排序。
- 如果您的输入是反向排序的(从大到小),代码将是Θ(n)
- 如果您的输入已排序,则此代码将为Θ(n²)
现在你可以把O(n(n+1)/2+n写成O(n²)。你在进行n次迭代,其中n是people.size()并将其乘以n,因为你再次迭代到n(索引),在复杂度1/3中,n(2)仍然是n(2),并且你使用的时间可能最差,所以n(2)是复杂度,在这种情况下,你使用的是插入排序算法,它是O(n^2)算法好的,谢谢,但是你怎么知道的?@ruakh,你是对的。我删除了它。虽然Nactive的答案是正确的,但下次有什么不清楚的地方,你应该来上课,问助教(即我)。