算法和数据结构入门

位运算、算法是什么、简单排序

  • 位运算
    • 左移 <<
    • 右移 >>
    • 按位取反 ~(每一位取反,0变1,1变0)
    • 按位与 &(1 & 1= 1、1 & 0= 0、0 & 0= 0)
    • 按位或 |(有1为1,0 | 0 为0)
    • 按位异或 ^(无进位相加:1+1=0、1+0=1、0+0=0) 0^N=N 、 N^N=0
1 & 1= 1
1 & 0= 0
0 & 0= 0
1 | 1= 1
1 | 0= 1
0 | 0= 0
1 ^ 1= 0
1 ^ 0= 1
0 ^ 0= 0
  • 原码:正数为本身、负数为本身+符号位1(如-1原码=1000 0001)
  • 反码:正数为本身、负数为本身取反+符号位1(如-1反码=1111 1110)
  • 补码:正数为本身、负数为本身取反加1+符号位1(如-1补码=1111 1111)
  • 什么叫算法
    • 具体问题 > 设计解决问题的处理流程 > 处理流程的可量化指标
  • 算法的分类
    1. 明确知道怎么算的流程
    2. 明确知道怎么尝试的流程
  • 选择排序
    • 挑选最小的值位置,然后交换到最左边,重复从未排的数字中挑最小交换到左边(忽略左边已排完的数)?
  • 冒泡排序
    • 从首位开始两两相比、大的交换右移、重复从未排的数字中相比交换(忽略右边已排完的数)?
  • 插入排序
    • 从左开始排,每次把未排的数跟已排数进行比较,小的交换左移继续比较(在合适的位置插入)?

以上排序都可以使用扑克模拟或者想像老师按高矮给学生排队?(注意边界条件,如null、单身)

数组、对数器、随机行为

  • 什么叫数据结构
    • 数据结构是存储、组织数据的方式
    • 精心选择的数据结构可以带来更高的运行或存储效率
    • 数据结构是很多算法得以进行的载体
  • 最基本的数据结构
    • 连续结构,比如:数组
    • 跳转结构,比如:链表

内存寻址相对区别:连续结构-查找快,更新慢;跳转结构-查找慢,更新快

  • Math.random();
    • 等概率产生double值,范围: [ 0, 1 )
  • 对数器的使用
    • 用来验证算法是否正确的一种方式。(采用最“老实”的方法+大量不同的参数来验证“便捷”方法的可靠性)

二分、复杂度、动态数组、哈希表、有序表

  • 什么是时间复杂度
    • 什么是常数操作?不受数据量影响,复杂度o(1)
    • o(1)>o(logn)>o(n)>o(lognn)>o(nn)>o(nnn)>...
  • 什么是动态数组
    • ArrayList
  • 动态数组的使用和扩容
  • 哈希表和有序表的使用
    • HashMap
    • TreeMap

单链表

  • 介绍单链表和多链表
    • 单链表:只有next指针(单向车道?)
    • 双链表:last+next指针(双向车道?)
  • 单链表的反转
  • 双链表的反转
  • 用单链表结构实现队列
posted @ 2022-01-18 09:32  ai狗子  阅读(20)  评论(0编辑  收藏  举报