关于算法的简单应用

解决问题的步骤,方法

给你一个有序的数组:  [-10,8,20,35,70,1000]

find:

线性查找

find2:

二分查找 -- 前提:  必须是有序的数组

怎么找中间数:

1-3 --2

3-9

3 4 5 6 7 8 9    --6

2-6

2 3 4 5 6 --4

3-8

3 4 5 6 7 8 5,6  约定:取中间数 偏左  - 5

start  end  ->  Math.floor( (start+end)/2)

n个数 最少找几次 最多找几次 平均找几次

线性查找 1 n n/2

二分查找 1 log(2)n log(2)n/2  //log以2为底n的对数

4 2

8 3

16 4

数量级 线性查找平均次数 二分查找平均次数 倍数

100 50 3.5 14

10000 5000 7 714

10W 5W 9 5000倍

1亿 5000W 13 384W

程序比较:

find:  11000

find2:  40

二分,  分治  --  分而治之

分治法:  可以解决绝大多数算法问题

找最小值:一分为二,left=递归左最小,right=递归右最小,比较left和right返回

数组去重:一分为二,left递归去重,right递归去重,循环right,如果不在left里,加到left,返回left

排序算法:

1)冒泡排序

比较相领的两个值,如果后面的小于前面的,就交换位置

2)选择排序(插入排序)

从剩余的数据中,找最小的,放到前面(和当前交换位置)

3)归并排序

分治法,二分法,左边排序自己,右面排序自己,每次比较左右数组第一个,小的扔到新的数组里面

4)快速排序

二分法,中间一刀,两个结果数组,分别放左右,递归调用,连接数组,c=arr.splice(cIndex,1),c[0]是中间数组

数据结构:

算法,离不开数据结构

有序的数组--数据结构

无序的数组--数据结构

算法,没有最好的算法,有最合适的算法

何为好坏:

衡量算法好坏,两个指标:

时间:时间复杂度 O(log(2)n)

空间:空间复杂度 S

分析不同数据结构

数据,增 修改  删除 查询

前提:数据不重复

增 查 综合

无序数组 50 39 85

有序数组 5000 5 5100

二叉树 25 12 35

散列 240 75 340

二叉树:

[ 56,49,62,70,76,2 ]

散列:哈希  hash

数组  存数据时,就用下标

例 :  5--->arr[5]

3--->arr[3]

数n  %  arr.length  --->  目标位置

算法

一天学不会

html,js 2年

PHP 3-4 年

JAVA 5-6年

算法 10+  年

算法  和 语言无关

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 5,766评论 0 7
  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 4,911评论 0 4
  • 情怀不是岁月给的,是自己给的。岁月不过是在帮你沉淀,到了某个年纪,某个时间,你需要把它拿出来晾晒一番,给它温暖。也...
    王浩南阅读 1,781评论 0 0
  • 前言:在网上经常会看到别人写的一些开源项目,然后会惊叹于他们的写的效果,当然那些大神也会把代码放出来,然后供大家看...
    青蛙要fly阅读 11,377评论 9 105
  • 我 幼时经常萌生,我,是谁,是何等物种,是谁将我带到这个世界?这个世界是...
    安静的乖乖妈阅读 1,586评论 0 2