数据结构与算法(入门)

数据结构与算法入门

面试经典

判断一个数是否是2的N次方。

解题思路

首先解题先看例子 【比如2 4 8 16 是的】【 6 10 不是的】

应该非常容易 就看这个数是不是可以拆成N个2相乘

最简单的求解 【 n % 2 == 0】

if (num != 1) {
    do {
        if (num % 2 == 0) {
            num = num / 2;
        } else {
            return false;
        }
    }
    while (num != 1);
}
return true;

优化 首先找更深层的规律 如

1 转 二进制 是 1

2 转 二进制 是 10

4 转 二进制 是 100

8 转 二进制 是 1000

规律 3&4 = 0 7&8 = 0

即 【n & n-1 == 0】

if (num != 1) {
    return (num & (num - 1)) == 0;
}
return true;

为什么要学习算法

  1. 面试会问
  2. 不要一辈子做curd工程师
  3. 架构师必学
  4. 提升自我能力

理论部分

【数据结构】 一个能组在一起的集合对象 如 数组 链表 队列等

【算法】 就是 提供解决问题的思路 如 递归 分至 迭代等

算法特性

五个特征

【有穷性】算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成

【确定性】算法中的每一步都有确定的含义,不会出现二义性

【可行性】算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成

【有输入】 算法具有0个或多个输入

【有输出】算法至少有1个或多个输出

设计原则

【正确性】【可读性】【健壮性】通俗的来讲就是代码很少有bug,而且系统比较稳定

算法效率衡量

**实现算法程序的执行时间可以反应出算法的效率,即算法的优劣。 **

单纯依靠运行的时间来比较算法的优劣并不一定是客观准确的!(就像硬件和操作系统等客观原因会影响)

这时候就可以使用两个度进行衡量

时间复杂度与“大O记法”

【时间复杂度】: 运行一个程序所花费的时间

O() 也叫做大O表示法

通常有 O(1),O(n),O(nlogn),O(n^2),O(n+1),O(logn),O(n!) 分别为常数、对数、平方

最坏时间复杂度

分析算法时 首先要看几种可能

  • 算法完成工作最少需要多少基本操作,即【最优时间复杂度
  • 算法完成工作最多需要多少基本操作,即【最坏时间复杂度
  • 算法完成工作平均需要多少基本操作,即【平均时间复杂度

​ 最优 体现的是最乐观最理想 的情况,所以价值不大

​ 最坏 提供的是一种保证 即最差操作中也能完成操作

​ 平均 属于全面评价 但同时无法保证任何环境都能运行

所以主要关注 【最坏时间复杂度】即可 就是保证无论什么情况都能运行(不出问题)

时间复杂度总结

学了时间复杂度,那我们的目的就是要把代码写到最优,效率最高

O(1)>O(logn)>O(n)>O(nlogn)>O(n2)>O(nx)

优化的目标就是要往O(1)的方向接近。

如何优化

1.找有循环的地方

2.找有网络请求的地方(RPC 远程调用 分布式 数据库请求)

把代码写到最优解

总结

简单的清楚一些基础概念 八股文章

posted @ 2022-04-11 18:37  火力彬  阅读(45)  评论(0)    收藏  举报