在各行各业都疯狂内卷的当下,咱们须要一直的扎实根底和学习新货色,来保障本人的竞争力。数据结构与算法能够说是所有编程语言的根底,学好它不仅让咱们能够写出更强壮、更高效、更稳固的代码,还能够在面试时,有更优异的体现。
数据结构与算法的学习并非枯燥无味,它有着独特的魅力。
数据结构与算法的魅力
如题:如何判断一个数是否是 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 公布!