乐趣区

关于java:数据结构与算法之开篇

在各行各业都疯狂内卷的当下,咱们须要一直的扎实根底和学习新货色,来保障本人的竞争力。数据结构与算法能够说是所有编程语言的根底,学好它不仅让咱们能够写出更强壮、更高效、更稳固的代码,还能够在面试时,有更优异的体现。

数据结构与算法的学习并非枯燥无味,它有着独特的魅力。

数据结构与算法的魅力

如题:如何判断一个数是否是 2 的 N 次方

用个别的逻辑来写,就是用循环除以 2,到最初看是否余 1,代码如下,咱们计算出工夫复杂度为 O(n)
while(n>1){if(n%2==0){n = n/2;}else{System.out.println("不是 2 的 N 次方");
       break;
    }
}
if(n==1){System.out.println("是 2 的 N 次方");
}
然而理解数据结构与算法,咱们其实能够有更优解。剖析一下,2 的 N 次方也就是咱们要判断的数 n 有什么特点?
转化为二进制,如下:

再比照 n - 1 的数据二进制:

发现 n 与 n - 1 二进制刚好互补,从而想到能够应用按位与 ”&” 运算:

10&01=00
100&011=000
1000&0111=0000
...

即:n&(n-1)== 0 的数即为 2 的 N 次方数!

这样一扭转,一段 while 循环,工夫复杂度是 O(n) 的代码,神奇的优化成了一行事件复杂度是 O(1) 的代码!

这就是数据结构与算法的魅力!能够让你写出性能更高,更牛逼的代码

算法的相干概念

五大特色

有穷性:无限的步骤之内失常完结,不能造成有限循环

确定性:算法中的每一个步骤都必须有确定的含意

可行性:算法的每一步必须都是可行的

有输出:有多个或 0 个输出

有输入:至多有 1 个或多个输入

设计准则

正确性:应能正确的解决某个问题,失去正确的答案或预期的后果

可读性:便于别人浏览和了解,其所要解决的问题和想要达到的目标

健壮性:当输出的数据非法时,算法该当失当地做出反馈或进行相应解决,而不是莫名其妙的输入后果。并且解决出错的办法不应是中断程序的执行,而应是返回一个示意谬误或谬误性质的值,以便于在更高的抽象层次上进行解决。

高效率与低存储

工夫复杂度:运行一个程序所破费的工夫,用 O() 示意

按效率从高到低:O(1) > O(logn) > O(n) > nO(logn) > O(n^2) > O(n^x)

空间复杂度:运行程序所须要的内存,用 OOM 示意

本文由博客一文多发平台 OpenWrite 公布!

退出移动版