其实目前国内几乎只要是技术岗,面试中都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. 用bitSet做百万级ip去重

    如果直接将几百万数据仍到bitset,内存是否够用?实际测试,600万ip放到一个bitSet中,jvm内存会爆. 所以,就简单做了下分组,构建一个HashMap<String, BitSet& ...

  2. vue大文件上传控件选哪个好?

    需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...

  3. 洛谷P3063 [USACO12DEC]牛奶的路由Milk Routing

    链接 其实在博客园里写题解都挺应付的都是在洛谷写了之后 挑一部分粘过来 在洛谷写的也都是废话,是为了凑篇幅 主要就是代码 大体思路就一提 这题贪心不行废话 跑m遍SPFA更新最小值 注意数组记得清空 ...

  4. 【BigData】Java基础_方法的定义与使用

    1.概念 Java语言中的“方法”(Method)在其他语言当中也可能被称为“函数”(Function).对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代 ...

  5. java语言总结

    优点: 安全(废弃指针) 任何一个学过C或者C++的人都知道指针的操作对于他们是很重要的,指针能够支持内存的直接操作,这样的直接操作能够带来的是效率上的提高.但是任何一个东西都是有副作用的,指针给程序 ...

  6. Python的WEB框架

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...

  7. 【转帖】 PM RD QA OP

    From 百度知道 一.PM: Product Manager,产品经理,又称品牌经理(Brand Manager).举凡产品从创意到上市,所有相关的研发.调研.生产.编预算.广告.促销活动等等,都由 ...

  8. JMeter一台机器可以支持多大的并发量

    Support for concurrent thread is basically depends on many factors like OS, free RAM and connections ...

  9. 66 网络编程(五)——TCP多线程实现多人聊天室

    思路 客户端读写各一个类,可以使内部类,实现Runnable.读写类都与服务器端建立连接,一个收,一个发. 客户端实现接收和转发.多线程实现每个客户端的连接(使与各客户端的连接独立). 服务器端中创建 ...

  10. Java学习:运算符的使用与注意事项

    运算符的使用与注意事项 四则运算当中的加号“+”有常见的三种用法: 对于数值来,那就是加法. 对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算.char类型字符,和int类 ...