其实目前国内几乎只要是技术岗,面试中都100%会问算法和数据结构。

这两者能快速体现候选人真实的水平,比如代码量,代码的质量,性能,思维是否有逻辑,是否灵活。

算法结果概述

1、前言

1.应用范围:机器学习、数据挖掘、自然语言处理、图形学等。

2.求职方面的考点贪心、分治、动态规划、树、图等。而且考官非常喜欢用算法来验证你的代码水平!

2、概述

1.定义:简单的说,算法就是解决问题的方式。

2.特点:有穷性、确定性、可行性、有输入&输出。

3、基础算法:

1.穷举法:求N个数的全部排列、8皇后问题。

2.分而治之:二分查找——减而治之、归并排序——分而治之。

3.贪心:最小生成树——Prim、Kruskal、单元最短路——Dijkstra。

4.动态规划:背包问题、士兵路径。

算法复杂度问题

1、概述

谈算法不谈复杂度=耍流氓!

硬件发展是常数级的,但是算法规模扩大是指数级别的。

在实现之前,要预估算法所需要的资源:时间、空间。

2、时空复杂度:

1.含义:使用大O记号(最坏情况,忽略系数)。

2.包括:时间复杂度(基本操作次数)、空间复杂度(占用内存字节数)、两者的区别是空间可以再利用、联系是时空互换(Hash表)。

3.举例:

O(1) :基本运算,+,-,*,/,%,寻址。

O(logn) :二分查找。

O(n1/2) :枚举约数。

O(n) :线性查找。

O(n2):朴素最近点对。

O(n3) :Floyd最短路、普通矩阵乘法。

O(nlogn):归并排序。

O(2n)  :枚举全部的子集。

O(n!): 枚举全排列。

上述例子的总结:

优秀:O(1) < O(logn) < O(n1/2) < O(n) < O(nlogn) 。

可能可以优化:O(n2) < O(n3) < O(2n) < O(n!) 。

4.方法:输入输出、数循环次数、均摊分析。

栈和队列问题

1、两者的共性和区别

1.共性:存放数据的线性表、空间复杂度O(n)、单次操作时间复杂度O(1) 。

2.区别:队列——先进先出(FIFO),栈——先进后出(FILO)。

2、操作

入栈/队列、出栈/队列、判断满/空。

3、实现

1.需要的工具:数组和链表皆可(线性表)、指针(辅助变量):栈顶/底指针、队头/尾指针。

2.关键:出入元素的同时移动指针。

4、应用

括号匹配测试及模拟系统栈,因为篇幅比较长,可以在公众号后台回复“应用”获取。

哈希表问题

1、哈希表概述

1.定义:存放数据的集合。

2.操作:根据(Key, Value)进行,插入、查找、删除(可以没有)。

3.空间复杂度:O(m)。

4.单次操作时间复杂度:O(1) 。

5.本质:Key的索引。

2、哈希表例题

1.题目:给出n个[0, m)范围内的整数,去重。

2.解题思路:

①快速排序:期望时间复杂度O(nlogn) ,附加空间复杂度O(1)。

②计数(基数)排序:时间复杂度O(n + m) 、附加空间复杂度O(m)。

3.在思考一下:

若n << m,计数排序的大量空间被浪费。

只需判断是否出现过,优化?

将Key区间[0, m) 映射到[0, p) 。

H(key) = key mod p、若m > p, 多对一的映射方式。

3、哈希表的实现

1.处理冲突(Key, Value):开放地址法(数组)、拉链法(数组+链表)。

2.负载率:负债率=已有元素大小/ 存储散列大小。

3.哈希函数设计:负载率越低,效率越高,一般负载率小于50%。

4、哈希表应用

1.题目:设字符串A=‘12314123’,求‘123’在A中出现的次数。如果不会写KMP又想要O(n),应该怎么处理那?

2.思路:Key(‘123’) = ‘1’* 10^2 +‘2’* 10 + ‘3’* 1 = 123。

3.问题:Key相等时Value有可能不同、每次比较Value也是不小的开销,特别是Value可能很大、不考虑Value将产生错误率(错误率换时间)、多重哈希(降低错误率)。

布隆过滤器问题

1、布隆过滤器概述

1.定义:判断一个字符串是否出现过的数据结构

2.和哈希表的区别:哈希表是空间换时间,而布隆过滤器是错误率换空间。

2、布隆过滤器的实现

1.由01的数字序列构成

2.插入:多个不同hash函数计算Key,置1

3.查找:有一个为0不可能存在,全为1可能存在

4.空间?

3、布隆过滤器的评价

1.优点:时间和空间、多个hash函数可并行、交差并(位运算)。

2.缺点:错误率随着负载率上升而上升、无法删除。

AI面试-算法结构基础的更多相关文章

  1. AI面试必备/深度学习100问1-50题答案解析

    AI面试必备/深度学习100问1-50题答案解析 2018年09月04日 15:42:07 刀客123 阅读数 2020更多 分类专栏: 机器学习   转载:https://blog.csdn.net ...

  2. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  3. Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦

    Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...

  4. JVM垃圾回收(三)- GC算法:基础

    GC算法:基础 在介绍GC算法在实际场景中的实现之前,我们先定义一些必要的术语,以及GC算法的基本准则.具体的细节会因收集器的不同而稍有区别,但是基本上来说,所有的收集器会关注以下两个方面: 找出所有 ...

  5. 2018科大讯飞AI营销算法大赛全面来袭,等你来战!

    AI技术已成为推动营销迭代的重要驱动力.AI营销高速发展的同时,积累了海量的广告数据和用户数据.如何有效应用这些数据,是大数据技术落地营销领域的关键,也是检测智能营销平台竞争力的标准. 讯飞AI营销云 ...

  6. 面试算法爱好者书籍/OJ推荐

    面试算法爱好者书籍/OJ推荐 这个书单也基本适用于准备面试. 一.教科书 基本上一般的算法课本介绍的范围都不会超出算法导论和算法引论的范围.读完这两本书,其它的算法课本大致翻翻也就知道是什么货色了. ...

  7. python经典面试算法题1.4:如何对链表进行重新排序

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...

  8. 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类

    概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...

  9. 【Xamarin开发 Android 系列 7】 Android 结构基础(下)

    原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...

随机推荐

  1. Python GIL、CPU密集型、IO密集型

    Python GIL(Global Interpreter Lock(全局解释器锁)) 1:进程里面多个线程,线程 共享A=10 2:Python解释器,A改完值之后会传回进程容器,为了防止A和B同时 ...

  2. 回溯法 | n皇后问题

    今早上看了一篇英语阅读之后,莫名有些空虚寂寞冷.拿出算法书,研读回溯法.我觉得n皇后问题完全可以用暴力方式,即先对n个数进行全排列,得到所有结果的下标组合,问题规模为n!. 全排列花了比较久的时间才编 ...

  3. 【数论&线段树】【P4140】[清华集训2015]奇数国

    Description 有一个长为 \(n\) 的序列,保证序列元素不超过 \(10^6\) 且其质因数集是前60个质数集合的子集.初始时全部都是 \(3\),有 \(m\) 次操作,要么要求支持单点 ...

  4. CF1174E Ehab and the Expected GCD Problem(DP,数论)

    题目大意:对于一个序列,定义它的价值是它的所有前缀的 $\gcd$ 中互不相同的数的个数.给定整数 $n$,问在 $1$ 到 $n$ 的排列中,有多少个排列的价值达到最大值.答案对 $10^9+7$ ...

  5. Kaggle实战——点击率预估

    https://blog.csdn.net/chengcheng1394/article/details/78940565 原创文章,转载请注明出处: http://blog.csdn.net/che ...

  6. Unittest 类方法

    import unittest,time from selenium import webdriver class TestClass(unittest.TestCase): @classmethod ...

  7. 【IntelliJ IDEA学习之一】IntelliJ IDEA安装激活、VM参数

    版本:IntelliJIDEA2018.1.4 特点:比eclipse更耗内存 1.下载 官网下载专业版. 2.安装一直下一步即可. 3.配置文件修改 (1)VM参数 进入安装目录,进入bin目录下, ...

  8. .net core mvc中input保留多位小数

    本篇介绍:如何在mvc中使用html标签保留多位小数 你需要知道: @html标签的使用: https://blog.csdn.net/pasic/article/details/7093802 js ...

  9. PatchMatch小详解

    最近发了两片patch match的,其实自己也是有一些一知半解的,找了一篇不知道谁的大论文看了看,又回顾了一下,下面贴我的笔记. The PatchMatch Algorithm patchmatc ...

  10. sql优化(原理,方法,特点,实例)

    整理的有点多,做好心理准备...... 1.资源优化理解: 不同设备,io不同.每种设备都有两个指标:延时(响应时间):表示硬件的突发处理能力:带宽(吞吐量):代表硬件持续处理能力. 每种硬件主要的工 ...