n+1

技术问题解答(一)

安稳与你 提交于 2020-01-18 23:45:40
n+1问题 n+1问题: 是什么:例如表a(主表)关联表b(从表),执行1次获取主表a的n条数据,由于关联关系,需要执行n次查询从表b,总共查询次数n+1。对表多次查询,造成性能问题,此为n+1问题。 为什么:对主表只需查询1次,对关联的从表确需要逐条查询,进行n次,造成性能问题。 解决方案:(1)懒加载:即用的时候再查询 (2)rails推荐解决:includes进从表;joins都是inner joins,取交集;(preload 和includes和eager_load都可以预加载 ) #n+1问题 User.all.each do |user| p user.blogs end #查询user表时,把includes进blogs User.includes(:blogs).each do |user| p user.blogs end #使用joins,会产生重复记录,可以用uniq去除 User.joins(:blogs) 或Blog.joins(:user) #select users.* from users inner joins blogs on users.id=blogs.user_id #select blogs.* from blogs inner joins users ... #另外:使用joins关联多个对象 User.joins(:blogs,

坐飞机——:)

瘦欲@ 提交于 2020-01-03 10:47:51
loj说我今天宜学数论。洛谷说我今天不宜泡妹子。——这就不太好啦。 【题目描述】 一架飞机有 n 个座位排成一列,有 m 名乘客( m≤n )依次上飞机。 乘客会选择一个目标座位(两人可以选同一个目标座位),然后选择从前门或者后门上飞机,上飞机后,他们会走到自己的目标座位,如果目标座位已经有人坐了,他们会继续往前走,在走到第一个空位后坐下。如果走到最后还没有找到座位,这名乘客就会生气。 问有多少种登机方案能让所有乘客都不生气。两个登机方案不同当且仅当第 i 位乘客的目标座位或上飞机走的门不同。 【输入输出格式】 输入格式: The first line of input will contain two integers n,m n , m ( 1<=m<=n<=1000000 ), the number of seats, and the number of passengers, respectively. 输出格式: Print a single number, the number of ways, modulo 109+7 . 输入输出样例 输入样例#1: 3 3 输出样例#1: 128 说明 Here, we will denote a passenger by which seat they were assigned, and which side they

Luogu P1016 旅行家的预算

旧时模样 提交于 2019-12-02 23:39:50
gate 再次感叹我太水了.. 贪心策略: 设当前加油站为i, 若i能到达的加油站中有油价比i低的加油站j,则在i加刚好能到达j的油,i→j 若没有,则在i把油加满(注意不要超出终点),i→i能到达的加油站中油价最低的一个 因为double写成int$debug$快一周... 代码如下qaq #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define MogeKo qwq using namespace std; const int maxn = 1005; const int INF = 0x3f3f3f3f; int n,u; double m,c,d,v,sum; struct node { double s,p; bool operator < (const node &N) const { return s < N.s; } } a[maxn]; int main() { scanf("%lf%lf%lf%lf%d",&m,&c,&d,&a[0].p,&n); for(int i = 1; i <= n; i++) scanf("%lf%lf",&a[i].s,&a[i].p); sort(a+1,a+n+1); a[n+1].s = m

卡特兰数

a 夏天 提交于 2019-12-01 17:24:46
卡特兰数 C(n,2n)/(n+1) 合法括号 C(n,2n)/(n+1) 出入栈 C(n,2n)/(n+1) 凸多边形的三角形划分方案 n+2边形 f(n)=f(0)f(n-1)+f(1)f(n-2)+***+f(n-1)f(0)=C(n,2n)/(n+1) n个结点的二叉树种数 f(n)=f(0)f(n-1)+f(1)f(n-2)+***+f(n-1)f(0)=C(n,2n)/(n+1) 来源: https://www.cnblogs.com/clear-love/p/11695704.html