Java 字符串反向操作最佳时间复杂度:是O(n)还是O(n/2)?

Java 字符串反向操作最佳时间复杂度:是O(n)还是O(n/2)?,java,algorithm,Java,Algorithm,下面是字符串反转的代码段 private static String reverseString(String originalString){ char arr[]= originalString.toCharArray(); char temp; for(int i= 0,j=arr.length-1;i<(arr.length/2);i++,j--){ temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } return new String(

下面是字符串反转的代码段

private static String reverseString(String originalString){
char arr[]= originalString.toCharArray();
char temp;

for(int i= 0,j=arr.length-1;i<(arr.length/2);i++,j--){

 temp=arr[i];
 arr[i]=arr[j];
 arr[j]=temp;
}
return new String(arr);
私有静态字符串反转字符串(字符串原始字符串){
char arr[]=originalString.toCharArray();
焦炭温度;

对于(inti=0,j=arr.length-1;i渐近而言,
O(n)
O(n/2)
之间没有差异。两者之间的差异是恒定的


如果您想计算上述代码段中操作的确切数量,可以更准确地说是3n/2,因为循环的每个迭代包含3个操作。当然,您还必须将输入字符串的转换添加到字符数组,反之亦然,这两个操作都需要线性时间。

使用大O表示法渐近分析中的d(长期意义)


这意味着所有线性函数的时间复杂度都是O(n),T(n)并不重要=n/1或n/2或n/3,因为从长远来看,它们都具有相同的效果。

如果要计算上述代码段中的确切操作数,如果忽略以下内容,则更准确地说是3n/2
:(1)索引比较(2)索引增量{和循环展开}(3)虚拟内存/CPU缓存方面。这就是为什么我通常不鼓励尝试计算操作的确切数量和使用率。如果您关心实际性能,请对其进行基准测试,不要尝试分析。