时间复杂度

小米C++面经

℡╲_俬逩灬. 提交于 2019-12-02 00:32:13
1、include " " 和<> 区别 include< file >编译程序会 先 到 标准函数库 中找文件 include”file” 编译程序会 先 从 当前目录 中找文件 include语句一般用来包含标准头文件(例如stdio.h或stdlib.h),因为这些头文件极少被修改,并且它们总是存放在编译程序的标准包含文件目录下。#include“file”语句一般用来包含非标准头文件,因为这些头文件一般存放在当前目录下,你可以经常修改它们,并且要求编译程序总是使用这些头文件的最新版本。 https://blog.csdn.net/weixin_36571185/article/details/78240931 2、static,static局部变量?生命周期?static关键字(全局,局部,成员变量,成员函数) 3、extern externC 4、inline 5、堆和 栈区别 6、new malloc 区别 7、进程线程区别 8、进程间通信 9、一道手撕算法题 平衡数 好像是一个整数 前半部分的数字相加和后半部分的数字相加 是与一样的 比如 1 2 2 1 这种 10、析构函数为什么要用virtual修饰? 11、多态 说了静态多态和动态多态,虚函数表和虚函数指针) 12、谈一下智能指针? 13、不想让别的对象访问本类,应该怎么做?然后自己怎么访问的?(答

luogu_2605: 基站选址

拈花ヽ惹草 提交于 2019-12-01 21:56:52
洛谷2605:基站选址 题意描述: 有 \(N\) 个村庄在一条直线上,第 \(i(i>1)\) 个村庄的距离第 \(1\) 个村庄的距离为 \(D_i\) 。 需要在这些村庄中建立不超过 \(K\) 个通讯站,在第 \(i\) 个村庄建立基站的费用为 \(C_i\) 。 如果在距离第 \(i\) 个村庄不超过 \(S_i\) 的范围内建立了一个通讯站,那么村庄就被基站覆盖。 如果第 \(i\) 个村庄没有被覆盖,则要向他们补偿,费用为 \(W_i\) 。 现在的问题是,选择基站的位置,使得总花费最小。 数据范围: \(k\leq N,k\leq 100,N\leq2*10^4,D_i\leq 10^9,C_i\leq 10^4,S_i\leq 10^9, w_i\leq 10^4\) 。 输入格式: 第一行包含两个整数 \(N,K\) ,含义如上所述。 第二行包含 \(N-1\) 个整数,分别表示 \(D_2,D_3,...,D_n\) \((\) 与第一个村庄的距离 \()\) ,这 \(N-1\) 个数是递增的。 第三行输入 \(N\) 个整数,表示 \(C_1,C_2,...,C_n\) \((\) 在第 \(i\) 个村庄建基站的费用 \()\) 。 第四行输入 \(N\) 个整数,表示 \(S_1,S_2,...,S_n\) \((\) 第 \(i\) 个基站覆盖的距离

2019.10.21刷题统计

穿精又带淫゛_ 提交于 2019-12-01 20:26:59
今天是在结束初赛后的第二天,也是我正式开始冲刺复赛的第一天。 进入冲刺网站后的第一个任务是办完DP的题。 第一题:1239 这道题中提示已经非常充足了,但正是因为提示,我缺少了自己的思考(完全照提示的公式抄),导致多次错误。最终还是解决了这道题。 AC代码: 第二题:1240 这道题也是给出了公式,套上原来模板(1238就相当于一个模板)即可。 理论上记忆化搜索与普通DP时间复杂度相同,但实际上记忆化搜索会超时(不能相信提示)。 超时代码: AC代码: 第三题:1241 这道题下面提示没给公式,但做完1238-1240三道题后,我已经可以在不看提示的情况下写出公式来了。 如果设a[i]为第i颗珠子的头标记,a[i+1]为其尾标记,同时也是第i+1颗珠子的头标记, f[i][j]为将i到j合并成一颗珠子所获得的能量, 则f[i][j]=f[i][k]+f[k+1][j]+a[i]*a[j+1]*a[k+1],其中i≤k<j。 破环为链后a[i+n]=a[i],求的是f[i][i+n-1],其中1≤i≤n。 AC代码: 第四题:1242 前面的题目都是复杂度为O(n 3 )的区间DP,这道题却是一个线性DP。 我的思路: 设f[i][j]表示电线杆i的高度为j时前i根电线杆的建设最少需要消耗的钱数,h表示最高的电线杆的高度 则f[i][j]=min(f[i][j],f[i-1][k]+

图论---------最短路专题

六眼飞鱼酱① 提交于 2019-12-01 20:09:53
一.Floyd   时间复杂度O(n的三次方),容易理解 二. Dijkstra   时间复杂度 n*m   缺点:不能处理负权边 三.Bellman-Ford   复杂度O(nm) 四.SPFA   时间复杂度O(mn)   经过队列优化的Bellman-Ford 五.堆优化后的 Dijkstra   有些题目不存在负权边,但是出的数据会卡SPFA,这个时候又要回到Dijkstra 立帖  2019/10/27 码完 来源: https://www.cnblogs.com/q1204675546/p/11716043.html

关于时间复杂度的问题[转载]

浪子不回头ぞ 提交于 2019-12-01 19:34:25
转载自: https://www.jianshu.com/p/f4cca5ce055a 我们假设计算机运行一行基础代码需要执行一次运算。 int aFunc(void) { printf("Hello, World!\n"); // 需要执行 1 次 return 0; // 需要执行 1 次 } 那么上面这个方法需要执行 2 次运算 int aFunc(int n) { for(int i = 0; i<n; i++) { // 需要执行 (n + 1) 次 printf("Hello, World!\n"); // 需要执行 n 次 } return 0; // 需要执行 1 次 } 这个方法需要 (n + 1 + n + 1) = 2n + 2 次运算。 我们把 算法需要执行的运算次数 用 输入大小n 的函数 表示,即 T(n) 。 此时为了 估算算法需要的运行时间 和 简化算法分析,我们引入时间复杂度的概念。 定义:存在常数 c 和函数 f(N),使得当 N >= c 时 T(N) <= f(N),表示为 T(n) = O(f(n)) 。 如图: 当 N >= 2 的时候,f(n) = n^2 总是大于 T(n) = n + 2 的,于是我们说 f(n) 的增长速度是大于或者等于 T(n) 的,也说 f(n) 是 T(n) 的上界,可以表示为 T(n) = O(f(n))。

推荐系统系列(二):FFM理论与实践

可紊 提交于 2019-12-01 18:29:48
背景 在CTR/CVR预估任务中,除了FM模型[2] 之外,后起之秀FFM(Field-aware Factorization Machine)模型同样表现亮眼。FFM可以看作是FM的升级版,Yuchi Juan于2016年提出该模型,但其诞生是受启于Rendle在2010年发表的另一个模型PITF [3](FM也是Rendle在2010年发表的),其论文原文 [1] 中写道: The idea of FFM originates from PITF proposed for recommender systems with personalized tags. 在各种深度推荐模型出来之前,FM/FFM模型在各大推荐相关的竞赛中大放异彩。今天,我们就来好好梳理一下FFM的原理以及如何将理论转化为实践。 分析 1. FFM公式定义 相较于FM模型,FFM模型引入了域(Field)的概念(该想法来源于PITF [3]),可看做是对特征进行分组。例如,对于性别特征而言,通常有两种取值 \(female\) 、 \(male\) 。对值进行one-hot编码之后性别特征会拆分为两个独立的特征 \(x_{female}\) 和 \(x_{male}\) 。显然,这两个特征具有共同的性质:都属于性别。所以可以将这两个特征归在同一个Field下,即有相同的Field编号。不同域的特征之间

时间复杂度比较

∥☆過路亽.° 提交于 2019-12-01 17:01:05
排序方法 最坏时间复杂度 最好时间复杂度 平均时间复杂度 直接插入 O( n2 ) O(n) O( n2 ) 简单选择 O( n2 ) O(n2) O(n2) 起泡排序 O(n2) O(n) O(n2) 快速排序 O(n2) O(nlog2n) O(nlog2n) 堆排序 O(nlog2n) O(nlog2n) O(nlog2n) 归并排序 O(nlog2n) O(nlog2n) O(nlog2n) 来源: https://www.cnblogs.com/smartljy/p/11694669.html

面经整理01

时光怂恿深爱的人放手 提交于 2019-12-01 16:51:52
数据结构、计算机网络、操作系统、linux shell脚本、数据库、Java基础、编程题目(数据结构) 一、面试经验 在真正面试的时候,不要和面试官一问一答模式,总体感觉把自己知道的扩展着回答效果会好很多,比如:问一个算法的时间复杂度,直接回答结果,还是把最好时间复杂度和最坏时间复杂度分析后得出时间复杂度告诉面试官的效果好? 二、数据结构 1. 二叉树的遍历 递归和非递归 2. 直接插入排序(时间复杂度) 快速排序(奇数和偶数) 3. 快排的缺点,解决办法。什么情况下快排时间复杂度为O(n^2) 4. 八种排序算法、思路、时间复杂度、最好/最坏。是否是稳定排序。空间复杂度。各自的应用场景。 5. 链表是否有环、怎样找环入口 6. 中序遍历递归和非递归 7. 求一个栈的最大元素 8. 两个栈实现一个队列 9. 判断很多单词是否能构成环 用到栈 10. 算法思想有 11. 字符串翻转 12. 一个数组求出现奇数次的数字 13. 哈夫曼编码和译码 14. 哈夫曼算法 15. 哈希表解决地址冲突的方法 16. 知道哪些链表结构、哪些树结构 17. 手写单例模式 三、操作系统 1. 多线程通信 2. 实现线程的方式和线程安全问题 3. c/s 和 b/s的区别和联系 4. 知道什么锁 5. 死锁 6. 信号量,信号量与互斥量的区别 7. 说下计算机体系结构,可以说操作系统 8. 进程线程区别

时间复杂度 分析 可能算法

被刻印的时光 ゝ 提交于 2019-12-01 16:37:41
一般ACM或者笔试题的时间限制是1秒或2秒。 在这种情况下,C++代码中的操作次数控制在 10 7 为最佳。 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: n≤30, 指数级别, dfs+剪枝,状态压缩dp n≤100 => O(n3),floyd,dp n≤1000 => O(n2)O(n2logn),dp,二分 n≤10000 => O(n∗n√),块状链表 n≤100000 => O(nlogn) => 各种sort,线段树、树状数组、set/map、heap、dijkstra+heap、spfa、求凸包、求半平面交、二分 n≤1000000 => O(n), 以及常数较小的 O(nlogn) 算法 => hash、双指针扫描、kmp、AC自动机,常数比较小的 O(nlogn)的做法:sort、树状数组、heap、dijkstra、 spfa n≤10000000=> O(n),双指针扫描、kmp、AC自动机、线性筛素数 n≤10 9 => O(n√),判断质数 n≤10 18 => O(logn),最大公约数 矩阵快速幂 遇到很多次了 需要注意了 来源: https://www.cnblogs.com/Tyouchie/p/11693614.html

常见时间复杂度与大小关系

╄→尐↘猪︶ㄣ 提交于 2019-12-01 16:35:01
常见时间复杂度 执行次数函数举例 阶 非正式术语 12 O(1) 常数阶 2n+3 O(n) 线性阶 3n2+2n+1 O(n2) 平方阶 5log2n+20 O(logn) 对数阶 2n+3nlog2n+19 O(nlogn) nlogn阶 6n3+2n2+3n+4 O(n3) 立方阶 2n O(2n) 指数阶 注意,经常将log2n(以2为底的对数)简写成logn 常见时间复杂度之间的关系 所消耗的时间从小到大 O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn) 练习: 时间复杂度练习( 参考算法的效率规则判断 ) O(5) O(2n + 1) O(n²+ n + 1) O(3n³+1) 来源: https://www.cnblogs.com/dreamofprovence/p/11693465.html