首页 > TAG信息列表 > Logn
[2011年NOIP普及组] 瑞士轮
试题分析:这道题目考察的是排序与模拟,题目要求明确,我们只需要模拟出来即可,我们需要对分数进行排序,而sort的时间复杂度为o(logn),所以会超时,所以我们选择归并,归并的时间复杂度为o(n),这里我用了<algorithm>中自带的merge函数。 代码如下:深入理解时间复杂度
时间复杂度 O(f(n)) 算法需要执行基本运算的次数的 级别。 一,思考 目前个人认为:时间复杂度实际就是考量两种情况。 1. 循环 for(),while() 2. 递归 二,何为n 理论上指:问题规模。 拆开来说,就是for(),while()循环了n次,递归了多少次(递归的情况略微复杂)。 三,何为f(n) 算法执行基本运算的次ST表
ST表嘛,就是一个可以解决可重复贡献问题的东西,并且很快,但是不支持修改 ST 表基于倍增思想,可以做到在$O(n \log_n)$时间内预处理, $O(1)$回答每个询问 实现+原理 先上代码,就着代码讲原理 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int logn = 21;[非原创] 算法时间复杂度
不记得是在哪里看到的了。。。知道的麻烦告诉一下我,谢谢。 排序算法中,常常要求我们估算出最坏情况运行时间和平均情况/期望运行时间。在估算运行时间时,我们常用到下面一些时间量: 符号 解释 1 大部分程序的大部分指令之执行一次,或者最多几次。如果一个程序的所有指令都具有P4211 [LNOI2014]LCA
P4211 [LNOI2014]LCA 分析 本题要计算的就是l~r与z的LCA的深度之和 我们来看看,是否可以将求多个dep转化一下 我们先对dep有一个理解,dep就是从i到root总共有多少点 我们从整体上考虑,发现对于一个询问:l , r , z 来说,所有的 lca 都在 z 到根的路径上。从而有一些点,它们对很多的 lca数据结构01-时空分析
1、时空分析 1、1时间复杂度分析 我们一般采用大 o 表示法,大 O 复杂度表示法 , 它并不表示代码执行真正需要的时间 , 而是一种随着数据规模增长的趋势。也就是我们考虑的是执行时间的上界。 //example: int cal(int n) { int sum = 0; //执行一次 int i = 1; //执行一icpc竞赛退役经验分享
icpc竞赛退役经验分享 前段时间某个竞赛的负责老师找我,说是有个经验分享的机会,于是根据我孱弱的竞赛经历,写了这篇短文。 主要想分享一些关于训练的想法。 大部分的竞赛初学者学习竞赛时,一般有专题学习与思维能力训练两个主要的方面,再下来就是模拟真实的比赛训练。而这三个部分中,算法(2)---算法复杂度理论
算法复杂度:分为时间复杂度和空间复杂度,一个好的算法应该具体执行时间短,所需空间少的特点。 结论: 复杂度与时间效率的关系 C < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是一个常量,n是一个变量且比c大) |-----------------|--------|-------------| 较好高级数据结构学习笔记 / Data Structure(updating)
树状数组 查询操作:O(logn) 修改操作:O(logn) #define lowbit(x) (x & -x) int tr[N]; // 树状数组 // 添加c个大小为x的数值 void add(int x, int c) { for(int i = x; i <= n; i += lowbit(i)) tr[i] += c; } // 求数值大小在1~x的数值的和 int sum(int x) {比较器,堆结构,堆排序
比较器: 1)比较器的实质就是重载比较运算符 2)比较器可以很好的应用在特殊标准的排序上 3)比较器可以很好的应用在根据特殊标准排序的结构上 4)写代码变得异常容易,还用于泛型编程 比较器的统一约定 @Override public int compare(T o1,T o2){ //返回负数的时候,就是o1比o2优先的情力扣 222. 完全二叉树的节点个数
最近开始刷力扣,将每日做题心得都会发布在这上面,以便日后查看。 起初看到这个题,忘记了完全二叉树的概念是什么,于是回顾一下。 这里参考了以下链接 满二叉树、完全二叉树、平衡二叉树、最优二叉树 时间复杂度:O(logn * logn) 空间复杂度:O(1) class Solution { public int counPython数据结构与算法分析(二、算法分析)
算法分析 时间空间复杂度 程序和算法不同,其执行的时间和占用的空间也不同,如何比较两种算法的优劣呢?引入大 \(O\) 记法进行算法复杂度的评价。 \(f(n)\) 名称 \(1\) 常数 \(logn\) 对数 \(n\) 线性 \(nlogn\) 对数线性 \(n^2\) 平方 \(n^3\) 立方 \(2^n\) 指数ST表模板
#include<bits/stdc++.h> using namespace std; int n,m; int f[100111][50],logn[10000011]; inline int read(){ char c = getchar(); int x = 0, f = 1; while (c < '0' || c > '9') { if (c == '-') f = -1; c =RMQ总结
RMQ可以用多种算法求解,可以用ST表来实现o(1)的静态求解,也可以用线段树来实现o(logn)的求解,更可以用树状数组实现o(logn*logn)即o(logn^2)的求解。 这里有一道例题,运用二分+RMQ求解,因为是静态的所以可以用ST表快速求解。 【GDOI2005】河床 (Standard IO) Time Limits: 1000 m时间复杂性O(f(n))
1、基本内容与常见时间复杂度对应的结构 ① T(n) =次数表示式,表示的是执行的次数; O(n) 通过T(n)的抓大头等操作后这就是时间复杂度,有O(1)、O(logn)、O(n)、O( nlogn)、O(n^2)、O(n^3)、O(2^n) 这些, 对应的结构是: O(1) : 没有for循环体的最上而下的时间复杂性是O(n) O(n) : 有一层fMaster公式
Master公式用来计算子问题规模确定的递归函数的时间复杂度。 形如 T(N) = a * T(N/b) + O(N^d)(其中的a、b、d都是常数) 的递归函数,可以直接通过Master公式来确定时间复杂度 如果 log(b,a) < d,复杂度为O(N^d) 如果 log(b,a) > d,复杂度为O(N^log(b,a)) 如果 log(b,a) == d,复杂度为redis底层数据结构(1)跳跃表
跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。这么说,我们可能很难理解,我们可以先回忆一下链表。 一、复习跳跃表# 1.1 什么是跳跃表# 对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其算法基础(七)– 排序算法总结
常见排序算法总结 排序算法汇总排序算法对比小结 排序算法汇总 最近对排序算法进行了一些复习,单独对常见的几种排序算法进行了整理总结,汇总如下: 算法基础(三)– 归并排序及其应用算法基础(四)– 快速排序要点整理算法基础(五)– 堆结构与堆排序算法基础(六)– 桶排序:计数排序与最详细STL(四)priority_queue
好吧,开始累了,不想写那么多废话了,直接讲对打oj有用的部分吧。 priority_queue是由堆来实现的,底层是用vector来实现的,接收三个参数 priority_queue<int , vector<int>, less<int> >; 第一个参数是每一个结点的数据类型,第二个参数是用什么容器来构造priority_queue,第三个结点是优先如何计算完全二叉树的节点数
https://labuladong.gitee.io/algo/2/18/31/ 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 222.完全二叉树的节点个数(中等) ———– 如果让你数一下一棵普通二叉树有多少个节点,这很简单,只要在二叉树的遍历框架上加一点代码就行了。 但是,如果给你一棵算法第二章上机实践报告
7-1 maximum number in a unimodal array (40 分) You are a given a unimodal array of n distinct elements, meaning that its entries are in increasing order up until its maximum element, after which its elements are in decreasing order. Give an algo[噼昂!]叕是斯特林数
\[\color{red}{\text{校长者,真神人也,左马桶,右永神,会执利笔破邪炁,何人当之?}} \\ \begin{array}{|} \hline \color{pink}{\text{The principal is really a god}} \\ \color{pink}{\text{with a closestool on the left and Yongshen on the right}} \\ \color{pink}{\text{holdi左神算法-基础03
左神算法-基础03 比较器的使用 1)比较器的实质就是重载比较运算符 2)比较器可以很好的应用在特殊标准的排序上 3)比较器可以很好的应用在根据特殊标准排序的结构上 public static class MyComp implements Comparator<Integer> { //实现Comparator 接口,重写compare()方法,实现自己的CSP-S2021赛后总结
555我怎么这么菜,差点就保龄了。 T1:本来想着历年都有签到题,今年应该也差不多吧,结果我看了将近半小时一点想法都没有,最后只打了个O(n^2*logn),拿个40pts. T2:想了一会,发现不可做,然后打暴力,然后15pts的暴力都没拿到,寄了。 T3:打了一个40pts的爆搜+剪枝,然后因为字符串输出寄了,如果n不是单学习笔记:RMQ问题ST表
引入 RMQ问题是求一个区间的最大值问题,通常有很多的询问。那么我们要如何解决这种问题呢? 暴力:当然可以O(nxm)n为个数,m为询问个数,显然不行。 线段树:建树需要 O(logn)的时间,询问需要 O(logn)时间,线段树的算法 是 O(nxlogn)+O(logn)的。 Sparse Table(ST):它是一种基于倍增思想的