算法初级

329 阅读3分钟

算法特性

  • 一个算法必须有0个或以上的输入量
  • 一个算法必须有1个或多个的输出量,输出量是算法计算结果
  • 明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确的匹配要求或期望,通常要求实际执行结果是确定的。
  • 有限性:根据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机只有有限个状态,有限个输入符号,和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
  • 有效性,又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来执行。

结构化编程

  1. 语句是一行一行执行的
  2. 有条件控制语句 if ... else ...
  3. 有循环控制语句 while(exp) do...

伪代码

  1. 不用纠结语法的细节,因为语法是你自己定的
  2. 可以体会语言设计者的想法,因为语法是你自己定的

五种排序

  1. 冒泡排序(体育老师两两摸头法)

    两两比较然后每次让最大的放在右边

  2. 选择排序(体育老师一指禅法)

    每次选出一个极端,比如最小的放在位置1,然后找出剩下中最小的,放在位置2,以此类推,最后所有都排好

  3. 扑克牌算法

    从后往前找,找到比它小的牌就放到它前面

  4. 桶排序(强迫症收扑克牌法)

    将每个牌放进对应的坑里面 然后一个个从坑里拿出来之后就是排好的了

  5. 快速排序(快排)

    随机取一个数据,以它为基准,比他大的放左边 比他小的放右边,然后继续这种方法,直到全部排完

数据结构

  1. hash (哈希)一个key 对应一个value (对象和数组都是hash)

  2. 队列:先进先出(比如说做一个抢火车票的,就要用队列,谁先来排队就先给谁票) 可以用数组实现

  3. 栈:先进后出 (比如拥挤的电梯) 可以用数组实现

  4. 链表 链表相对于数组来说 删除其中某一项要比数组方便很多,在js中不常用

  5. 树 tree (比如说html的页面 有很多节点 很多层级结构)

    • 二叉树:每个节点最多只有两个分支的树结构
    • 满二叉树:每一层上的节点数都是最大节点数 第0层一个节点,第一层两个节点,第二层4个节点。。。第n层 2的n次方
    • 完全二叉树:在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树
    • 完全二叉树和满二叉树可以用数组来实现

堆:

堆通常是一个可以被看做一棵树的数组对象