常用优化

优化一:预处理优化
预处理优化之——前缀和优化:
非常常见的优化方式。此处的前缀和指某数组的前i项和。
如给定数组a[n],求sum[n]。其中sum[i]=a[0]+a[1]+...+a[i]
这里的sum[]数组即为数组a的前缀和数组。
那么前缀和有什么用处呢?
假设我要求a[x]+a[x+1]+a[x+2]+...+a[y]
那么这个答案就等于 sum[y]-sum[x-1](x!=0)。若x=0则等于sum[y]。
有一点:如果原数组的数字是非负的,那么sum数组则是非递减的,在搜索的时候可以考虑使用二分。

其他预处理优化。
预处理根据题目需要求的问题,事先处理好保存起来,解决问题的时候可能需要多次使用,这样的话,只需要计算一遍,不用每次需要用的时候重复计算。

优化二:离线处理
解决问题时可能会需要很多问题的答案,而这些问题是无序的。但是假如这些问题是有序的,可以一次性直接处理出结果。那么我们可以先将询问排序,然后一次性处理出所有结果,然后再将结果按照询问的顺序给出。
总的来说,离线处理即预先保存好所有询问,然后一次性给出所有结果。
当然这么做的前提是能提高效率。

时间: 2024-10-06 12:12:19

常用优化的相关文章

.Net中的并行编程-6.常用优化策略

            本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略.      一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁,最好的线程之间同步方式就是不加锁,这个地方主要措施就是找出数据之间的哪个地方需要共享数据和不需要共享数据的地方,再设计上避免多线程之间共享数据. 在以前做过的某项目,开始时设计的方案: 开始设计时所有的数据都放入到了公共队列,然后队列通知多个线程去处理数据,队列采用互斥锁保证线程同步,造成的结果就

ListView常用优化技巧(Android群英传)

内容是博主照着书敲出来的,博主码字挺辛苦的,转载请注明出处,后序内容陆续会码出. 前言:ListView--列表,它作为一个非常重要的显示方式,不管是在Web中还是移动平台中,都是一个非常好的.不开或缺的展示信息的工具.在Android中,ListView控件接管了这一重担,在大量的场合下,我们都需要使用这个控件.虽然在Android 5.X时代,RecyclerView在很多地方都在逐渐取代ListView,但ListView的使用范围依然非常的广泛,它这万年老大哥的地位也不是轻易就能撼动的.

ns3 常用优化技术

ns3中大部分程序使用C++,对C++的很多部分都进行了优化,比如日志系统/智能指针等. 于是就想起写这篇文章来总结一下. 1. Logging系统 C++中一般使用std::cout来打印消息,当打印语句增多时,这个就不太实用了,于是出现了Logging系统,其实是对打印的消息进行了分类,从而更好的控制打印的消息.log的级别在程序中是这样设定的: enum LogLevel { LOG_NONE = 0x00000000, //!< no logging LOG_ERROR = 0x0000

Tomcat 5常用优化和配置

Tomcat 5常用优化和配置 1.JDK内存优化:Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:JAVA_OPTS='-Xms[初始化内存大小] -Xmx[可以使用的最大内存] 一般说来,你应该使用物理内存的 80% 作为堆大小.2.连接器优化:在tomcat配置文件server.xml中的配置中,和连接数相关的参

DP常用优化

DP常用优化 一.前缀和优化 当遇到类似:\(f[i] = \sum_{j = k}^{i} g[j]\)的转移时,可以通过预处理出\(g[i]\)的前缀和\(s[i]\),将\(O(n)\)的求和转换为\(O(1)?\)的操作. [HAOI2009]逆序对数列 [HAOI2008]木棍分割 二分答案+dp P4099 [HEOI2013]SAO 树形dp 二.决策单调性--单调队列优化 接下来几种优化方法主要是对1d/1d dp的优化,其中xd/yd dp指的是状态数有\(n^x\)种,每个状

机器学习最常用优化之一——梯度下降优化算法综述

转自:http://www.dataguru.cn/article-10174-1.html 梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法.几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现.但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释.这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用. 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的

反向传播常用优化器

github博客传送门 csdn博客传送门 计算出损失值后,这个损失值越小越好,梯度下降的算法就用在这里,帮助寻找最小的那个损失值,从而反推出 w 和 b 达到优化模型的效果 常用的梯度下降法可以分为: 批量梯度下降:遍历全部数据集算一次损失,计算量大,计算速度慢,不支持在线学习 随机梯度下降:每看一个数据,就算一下损失,速度快,收敛性能不太好,较低点震荡比较剧烈 小批量梯度下降法:将数据分为多批,按批更新参数,相对前两种,这种方法比较折中 # 一般的梯度下降算法 Optimizertf.tra

MySql 的常用优化

1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该使用MEDIUMINT而不是 BIGIN来定义整型字段. 另外一个提高效率的方法

Mysql常用优化方案

摘自:http://www.jb51.net/article/18934.htm 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应