一个临界点的问题

假设有一组值(大于等于0的数),总量级别:百万以上,需要求出总和在某个值(Y)的位置。实际情况中Y的值一般也是上万的。
比如:有 5,2,0,3,4,6,7,1,11,3 等求在Y=12的位置,
分析如下:
值: 5,2,0,3, 4, 6, 7, 1,11,3
累计:5,7,7,10,14,20,27,28,39,41
此时临界点在第4个数【3】那。如果是10的话,位置也是第4个数。
数据在数据库中,实际处理不考虑数据的排序问题,只需要从总量中找到一片数据总量接近或等于Y。

请教有何算法可以快速定位到临界点的位置.

已知道的算法,
1,逐条累计,可能需要较长时间
2,先按大到小排序,逐块累计,比上面快些。(操作是允许排序的)
3,类似2分的算法,直接对半,累加前半数据比较,大的话再减少一半,小的话加上剩余的一半。无限2分,直至累计值与Y的接近或等于。

这个算累计 我是在数据库ORACLE中做的。

jinnianshilongnian
jinnianshilongnian 序列长度固定吗
接近 8 年之前 回复

4个回答

1、原始表:
t_bill;字段:索引ID(number),分钟值talktime(varchar(40));
2、递归累加生成表:
t_bill_2 ;字段:索引ID(number),分钟值talktime(varchar(40));

递归累加生成表 talktime建立索引

两个表的id一样;

3、可以考虑根据递归累加生成表的talktime分表; 比如1--1000的在1表,依次类推;

4、根据根据Y值查分表编号,然后查

jinnianshilongnian
jinnianshilongnian 客气 很喜欢探讨这种问题 哈哈
接近 8 年之前 回复
weixin_42501429
weixin_42501429 谢谢认真的回答!
接近 8 年之前 回复
jinnianshilongnian
jinnianshilongnian 之前用过 不过按照我的理解也不会很快 因为毕竟要计算 而且要按条走 每次都需要这个流程 我的想法还是 先构建那种累加表 再查 就不那么麻烦了
接近 8 年之前 回复
weixin_42501429
weixin_42501429 select id from( select id,rownum r from ( select ID,talktime,sum(talktime) over (order by to_number(talktime) desc ) total from t_bill where to_number(talktime)>0 order by talktime desc ) x where x.total<=43210 order by x.total desc ) y where rownum=1 安装以上思路写的,其实我对于分析函数不懂的。 应该外挂一张表 可能查询会快些。
接近 8 年之前 回复
jinnianshilongnian
jinnianshilongnian 分析函数 不错 在程序中分页查 然后生成也行,,反正是累加 需要全表扫描 而且顺序
接近 8 年之前 回复
weixin_42501429
weixin_42501429 好吧 找到一个 类似累加的写法:select ID,talktime,sum(talktime) over (order by to_number(talktime) desc ) from t_bill
接近 8 年之前 回复
jinnianshilongnian
jinnianshilongnian 暂时没有想到更快的,我觉得这个表只要分的合理应该不慢 比较是局部查
接近 8 年之前 回复
weixin_42501429
weixin_42501429 我知道累加 是需要循环去累加的,不知道是不是还有更快的方法,如果有我也觉得这个会很快。
接近 8 年之前 回复
jinnianshilongnian
jinnianshilongnian 对, 递归累加生成表 这个是当添加序列时 自动构建的。 其实就是和序列表 一起生成的,而且只需生成一次,下次直接用即可
接近 8 年之前 回复
weixin_42501429
weixin_42501429 相当于加个累加字段total,(累加顺序规则 可能是 大小顺序 或者ID),这样是可以直接去查询到某个值接近Y;这个思路蛮好的,但我不知道,前面这步需要多长时间能做完?效率快吗? 不知道我理解对不对呢?
接近 8 年之前 回复

两个数比较比加运算要省时间,尽量减少加的运算次数,已知Y的值,那么也就是说必须一个一个计算累加到Y附近,这个运算至少要进行一次,则1和2的方法比3要快,最好是从大到小排序,这么的话尽量少的加运算就可以累加到Y值。

zyn010101
zyn010101 select sum(talktime) from table ,表有10w记录,你没有进行加计算,但是数据库依然进行了10w次加法才能返回给你这个结果
接近 8 年之前 回复
zyn010101
zyn010101 二分的话你把sum计算交给了数据库,数据库还是要全表扫描那些记录,你二分几次,它就累计加几次(几万连续累加)的计算,你的sql没有这个算法,不代表计算机不去执行这个算法,数据库的count,avg,sum都需要加计算,跟你用代码实现是一样的。
接近 8 年之前 回复
weixin_42501429
weixin_42501429 如果需要循环几万次的才能到结果,2分的话 可能需要100次,你觉得谁快呢?当然2分1次没有单纯的循环处理1条的快,但是但上W的级别,你还觉得一条条快?
接近 8 年之前 回复
zyn010101
zyn010101 没错,是要循环几万次,但你要明白,你用sum(talktime)的时候,这个是交个数据库来计算的,它依然要计算几万次不是?即便每次都采用2分法来sum(talktime),你进行的累加的计算更多,不是吗?
接近 8 年之前 回复
weixin_42501429
weixin_42501429 count(talktime) 写错, 是 sum(talktime)
接近 8 年之前 回复
weixin_42501429
weixin_42501429 偽代码: FOR i IN 1..321987 LOOP select count(talktime) into tmp from t_bill where rownum <=i order talktime desc ; --将tmp与总量对比 --如果临界值在几万条之后,那么岂不是要循环几万次?这个快?我是请教有无更快算法。我说的方法 我是感觉不快。 END LOOP;
接近 8 年之前 回复

假设有一组值(大于等于0的数),总量级别:百万以上,需要求出总和在某个值(Y)的位置。实际情况中Y的值一般也是上万的
1.
(1000000个数的和) / 1000000 = 一百万的数的平均值
2.
Y / 一百万的数的平均值=等于大约需要累加多少数,然后以这个位置开始判断
3
相差值不大的话就慢慢比较,比较大的话,就从这个位置开始,按步骤1,继续

cttnbcj
ccccj 1.(1000000个数的和) / Y = 以这个数为步长 2 每次按这些这个步长 把数加起来和Y比较 相差不大就一个个慢慢比较 相差大的话 跳转到1 ,按1方法比较。 这个问题的任何方法都只能是O(N) 但是我说的方法二能比较快的接近。 jinnianshilongnian 第三方用到数据库.....,这个。。。呵呵
接近 8 年之前 回复
weixin_42501429
weixin_42501429 你这个其实就类似2分的做法,不过比例去做很不准的。 因为单数据可能很小 也可能很大,当然先排序再去按比例 会好些把。
接近 8 年之前 回复

1.(1000000个数的和) / Y = 以这个数为步长
2 每次按这些这个步长 把数加起来和Y比较
相差不大就一个个慢慢比较 相差大的话 跳转到1 ,按1方法比较。

这个问题的任何方法都只能是O(N)
但是我说的方法二能比较快的接近。

jinnianshilongnian
第三方用到数据库.....,这个。。。呵呵

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java多线程,临界资源值问题

package demo01; class Window extends Thread{ static int num=200; String name=new String(); Window(String name){ this.name=name; } public synchronized void run(){ synchronized(Thread.currentThread()){ while(num>0){ System.out.println(name+"售出一张,剩余"+--num); } } } } public class TicketSail { public static void main(String[] args) { try { Window w1 = new Window("哈站"); Window w2 = new Window("哈西"); Window w3 = new Window("哈东"); w1.start(); w2.start(); w3.start(); } catch (Exception e) { // TODO: handle exception } } } 为什么num输出总有乱的,弄了好久没弄懂,求问题原因及解决方法 ![图片说明](https://img-ask.csdn.net/upload/201705/31/1496212503_984889.png)

Jmeter中压力测试关于线程组的问题

我测试的是项目中的查询按钮。我模拟了10个请求 我把10个请求放在一个线程中,聚会报告结果如下: ![图片说明](https://img-ask.csdn.net/upload/201808/14/1534227657_893113.png) 之后我把这10个请求分成了2个线程组,5个请求一组,聚合报告结果如下: ![图片说明](https://img-ask.csdn.net/upload/201808/14/1534227717_411014.png)![图片说明](https://img-ask.csdn.net/upload/201808/14/1534227728_189229.png) 最后我把这10个请求中分成了6个线程组,请求名带副本两字的请求,一个副本一个线程组,这里有5个线程组,之后把没有带副本2字的5个请求放在一个线程组。 聚合报告结果如下:![图片说明](https://img-ask.csdn.net/upload/201808/14/1534228003_18611.png) 我的疑问有几下几点(副本就是和正本的url路径相同): 第一点,我把10个请求放在同一个线程组里,配置的相同路径的2张相同的报表,只是查询数据库的SQL语句条件不一样,但是查询的时间会差距很大,但是我后面给他设置了2个线程组,副本和正本的查询时间就会相近。这是为什么。 第二点,我在这里设置了多个线程组,也就是第三种情况,副本跑完这5个路径的时间比正本放在一个线程组跑完5个路径的时间会快很多,这里的时间指的是线程组的运行时间。然后查询的平均时间会有一定的差距,那么我在模拟用户的并发情况的时候,我是把所有请求放在一个线程组里好,还是一个请求放在一个线程组好。 第三点,吞吐量是不是和数据库查询时间有关系,那么我到底怎么测试才可以压测到临界值。同一个报表,不一样的sql语句,也就是说同一个url后面带的参数不同,测出来的吞吐量差距也会有不同,这时候我怎么知道临界值。

iocp编程中的几个问题点,望指点

1:在提交WSASend或者WSARecv的时候PPER_IO_OPERATION_DATA这个buff为何要用GlobalAlloc 是否可以用new申请?区别何在? 2:当客户端有1万左右时,服务器给所有服务端发送消息,是否可以直接用WSASend投递一万次,如果WSASend失败且GetLastError()!=WSA_IO_PENDING是否需要释放在[1]中申请的buff并关闭客户端的socket?经测试直接投递一万次到达客户端的效率并不高,只有一半以下的客户能收到数据,而且之后的投递效率越来越低,最终貌似会导致GetQueuedCompletionStatus都不能获取到WSASend之后的完成状态?获取不到WSASend的完成状态又会导致申请的buff不能正确释放从而导致内存泄露,这样的大规模投递WSASend正确处理方式? 3:因为工作线程数量时cpu核数*2,在工作线程中会调用到回调函数处理客户的数据,比如客户退出,我需要删除这个客户那么必须要在客户列表中遍历找到退出的客户再将其删除,当连接数上万的时候遍历势必会阻塞工作线程,所以我在工作线程中将要退出的socket加入到一个列表中再另开一个线程处理这个列表,但由于与此同时是会有客户端进入和退出的,所以为了避免数据冲突加入了临界保护变量,但是工作线程有客户进入的时候同样会进入临界保护变量,相当于工作线程依然要等待处理客户退出线程退出临界区才能正常运行,相当于还是阻塞了?此处的正确处理方式?

内存一致性模型问题。不同核心赋值可以同时进行吗。

![图一](https://img-ask.csdn.net/upload/201810/20/1540035692_165227.png) 对于图一说明如下:为什么要约束到程序顺序?以下图程序为例,开发者原本期望通过 Flag1 和 Flag2 来控制两段程序中的临界代码最多只有一个可以执行,但是,如果处理器 / 编译器对执行的执行顺序进行了调度,使得 Flag1 和 Flag2 的执行被挪到了临界代码之后,那这样一来两段临界代码都会执行,从而违背了开发者的期望。 请问为什么在此代码中可以通过 Flag1 和 Flag2 来控制两段程序中的临界代码最多只有一个可以执行? ![图二](https://img-ask.csdn.net/upload/201810/20/1540035778_463385.png) 对图二问题如下:这个流程图应该如何理解,为什么在t1先进行Flag2的读取? 我是计算机架构新手,在研究储存一致性模型的时候对于这个点理解不到位。 文章和图片来自:https://blog.csdn.net/maokelong95/article/details/80727952#2__57

FLEX4 应用 Error #2046 只能修改系统时间问题求解

项目组2011年5月至今陆续上线的应用,昨日有些客户反映加载.swf均显示“Error #2046”。 根据网上信息: (1)已排除客户端时间与服务器时间不同步或时间偏移较大的可能,确认时间是同步。 (2)删除application data/adobe/下的cache文件,也不行。 现状: (1)只能将客户端的系统时间改为2015-05-06 08:10:00(临界点)之前的时间方可正常加载.swf。 (2)有些PC客户端不需要修改系统时间也能访问。 目前让不能正常访问的用用户以修改系统时间访问应用,现在不清楚客户端或服务器端哪里还有相关认证或有效期的限制。 请友们帮忙释疑。很抱歉没有币,先表示感谢!

c#中快速从3个DataTable中分别提取一个数据进行相加,获得我想要的值

【背景】:有三个DataTable,每个DataTable大约1.5万条数据。 【我的需求描述】:封装一个方法,参数1是我需要的值,参数2是偏差值,参数3、4、5分别是3个DataTable,参数6是一个允许的匹配次数(当然,有好的办法的话,这个参数可以不要),我的意思必须要很快的从3个DataTable中各抽出一行中的一列(也就是分别从3个DataTable中提取一个数),进行相加,3个数加得的总和应该在参数1的值减去偏差值到参数1的值加上偏差值这个范围内,并且我需要快速得到数据,比如2秒内,求最好的解决办法......(提醒:我要的是很快可以得到结果的办法,不是1分钟才能得到结果) 【再次累赘的说一下想完成的功能】:就是说:用户输入一个想得到的值(比如2500),然后用户输入一个允许的偏差值(比如500,正负偏差都可以就是说高于500以内或低于500以内都可以,当然,偏差值是0也可以),3个容器(DataTable或数组或集合都行,这里是由系统提供的固定数据),最终需要使用大家的方法而得到的索引分别代入3个容器中,以便从3个容器中分别取一个值出来,进行相加,使得加数属于该用户想得到的值(此时应在2000-3000范围内,含临界值)即可。 【我的其他要求】:必须是匹配速度非常快(最慢1-2秒)、准确、代码合理。如果用户每次都输入2500的需求值和500的偏差值,最终你们提供的方法所获得的索引不应该每次都一样,当然如果有特殊情况下只能匹配出一个的话是列外的,因为以现有的值来看,一般偏差值不是0的话,按道理是可以匹配出很多条的,但是,只要找到一个匹配,即可以直接返回了。方式不需要有多大的通用性,只要能满足该需求即可. [点击这里下载测试项目,写好了的,有数据直接可以测试][1] <-----■■■■■■■■■ 【一些提示】:有人反映说我的数据有重复,其实告诉你们,里面有45041条,是没有重复的,只是weight有重复而已,我给你们的数据库删除了很多列,其他列是没有重复的。 【想封装的方法如下】: /// <summary> /// 获取自动匹配 /// </summary> /// <param name="needValue">需要的值</param> /// <param name="deviationValue">允许的偏差值(正负)</param> /// <param name="dtFirst">第一个数据容器:DataTable</param> /// <param name="dtSecond">第二个数据容器:DataTable</param> /// <param name="dtThird">第三个数据容器:DataTable</param> /// <param name="reMatchCount">允许的匹配次数,如果有更好的办法,该参数可以取消掉</param> /// <returns>获得的结果,比如:三个DataTable的索引</returns> public object GetAutoMatch(double needValue, double deviationValue, DataTable dtFirst, DataTable dtSecond, DataTable dtThird, int reMatchCount) { //我们假设此时传来的参数值是: needValue=2500; deviationValue=500; dtFirst=第1个DataTable;//(是固定数据,当然,这里你理解成一个数组也行) dtSecond=第2个DataTable;//(是固定数据,当然,这里你理解成一个数组也行) dtThird=第3个DataTable;//(是固定数据,当然,这里你理解成一个数组也行) reMatchCount=99999;//暂时没用上,如果采用循环方式,可以考虑用上此参数 //只要大家在三个DataTable中分别抽出一个数(也就是说任意三个索引) //加起来的值是我想要的,就匹配成功了 int firstIndex = 0;//这里是关键,就是让大家帮我得到一个firstIndex int secondIndex = 0;//这里是关键,就是让大家帮我得到一个secondIndex int thirdIndex = 0;//这里是关键,就是让大家帮我得到一个thirdIndex //问题就在这里,我需要大家想个办法出来,能在1秒钟内得到3个索引值,最重要的是,把索引值代入后面的if判断必须要满足条件,因为我事先分别知道3个DataTable的最大值和最小值,而且我限制了needValue、deviationValue了,按照我的限制规则加上你们得到的3个索引,匹配的结果是绝对能匹配成功的,如果匹配不出,那么代表你们帮我获取的3个索引值根本不正确。 //按照以上传参的值,如果sum在2000-3000范围,就算匹配成功 double sum = Convert.ToDouble(dtFirst.Rows[firstIndex]["Weight"]) + Convert.ToDouble(dtSecond.Rows[secondIndex]["Weight"]) + Convert.ToDouble(dtThird.Rows[thirdIndex]["Weight"]); //如果找到任意一组匹配的项,就可以return了。 if (sum == needValue //|| sum == needValue - deviationValue//这个不需要,因为后面是<= //|| needValue == sum - deviationValue//这个不需要,因为后面是<= ||sum - needValue <= deviationValue || Math.Abs(needValue - sum) <= deviationValue) { return firstIndex+"|"+secondIndex+"|"+thirdIndex+"#"+sum; } return "-1|-1|-1#0"; //建议大家看完后,给点评论什么的,说下您的建议。 //感谢大家的帮助....................... //手写的代码,有点累,而且有些内容多处累赘了,不好意思... } [1]: http://www.i9kv.com/down/MatchNumber.rar

图的广度优先遍历问题求教

该程序运用邻接矩阵创建图,运行后没有出现图的广度优先遍历的结果的打印。。。请大神帮忙看看我写的广度优先遍历算法哪里出现了问题,万分感激! #include "stdafx.h" #include <iostream.h> #include <conio.h> #include <stdio.h> #include <queue> using namespace std; void EnQueue_Sq( queue<int> &Q , int v ) { Q.push( v ); } int DeQueue_SQ( queue<int> &Q ) { int i = Q.front(); Q.pop(); return i; } //1、邻接矩阵 #define VexType char #define EdgeType int #define INFINITY INT_MAX // 最大值∞ #define Max_Vertex_Num 10 // 最大顶点个数 bool visited[ Max_Vertex_Num ];//辅助数组--遍历使用 struct MGraph{ VexType vexs[ Max_Vertex_Num ]; //顶点数组 EdgeType edges[ Max_Vertex_Num ][ Max_Vertex_Num ];//邻接矩阵 int vexnum; //当前顶点数 int edgenum; //当前边数 //GraphKind kind;//图的种类标志,本练习假定图为无向带权图(即 无向网) }; void DSF_MG( const MGraph &G , int v ); void BFS_MG( const MGraph &G , int v ); /////////////////////////////算法实现///////////////////////////////////// //一、邻接矩阵操作的实现 //1、 创建图 void CreateGraph_MG( MGraph &G )//构造一个具有n个顶点,e条边的无向网(注意:输入必须准确,算法中没有判断非法输入!) { cout<<"请分别输入顶点数目和边的数目:"; cin>>G.vexnum>>G.edgenum; int n = G.vexnum; int e = G.edgenum; int i , j; for (i = 0 ; i < n ; i ++ ) { cout<<"请输入第"<<i<<"个顶点的信息:"; cin>>G.vexs[ i ]; } //初始化邻接矩阵 for ( i = 0 ; i < n ; i ++ ) for ( j = 0 ; j < n ; j ++ ) { G.edges[i][j] = INFINITY; } for ( i = 0 ; i < e ; i ++ ) { int beginNode , endNode; cout<<"请输入第"<<i<<"条边的第一个顶点的编号(从0开始):"; cin>>beginNode; cout<<"请输入第"<<i<<"条边的第二个顶点的编号(从0开始):"; cin>>endNode; cout<<"请输入第"<<i<<"条边的权值(注意为非0值):"; cin>>G.edges[beginNode][endNode]; G.edges[endNode][beginNode] = G.edges[beginNode][endNode]; } //输出图的信息 cout<<"输入完毕!"<<endl; cout<<"顶点数组:["; for (i = 0 ; i < n ; i ++ ) { cout<<G.vexs[ i ]<<" "; } cout<<"]"<<endl; cout<<"邻接矩阵:"<<endl; for ( i = 0 ; i < n ; i ++ ) { for ( j = 0 ; j < n ; j ++ ) { if( G.edges[ i ][ j ] != INFINITY ) printf( "%5d" , G.edges[i][j] ); else printf( "%5c" , '-'); //cout<<G.edges[i][j]<<" "; } //cout<<endl; printf( "\n" ); } } //2、求邻接结点及其度 void Dsp_ArjNodes_MG( const MGraph &G , int v )//输出第v个顶点的所有邻接点信息以及该结点的度(注意i不在取值范围内应提示错误信息) { if(v>=G.vexnum) cout<<"ERROR"<<endl; int count = 0; for(int i=0;i<G.vexnum;i++) { if(G.edges[v-1][i]!=INFINITY){ cout<<"临界结点有"<<i<<endl; count++; } } cout<<"该点的度为"<<count<<endl; } //3、找邻接点 int FirstAdjVex( const MGraph &G , int v )//找到顶点v(v为顶点的index)的第一个邻接点并返回该邻接点的index,如果不存在邻接点,则返回-1 { int j,p=-1,found=1; for(j=0;((j<G.vexnum)&&(found==1));j++) if(G.edges[v][j]!=INFINITY) { p=j; found=0; } return p; } //4、找下一个邻接点 int NextAdjVex( const MGraph &G , int v , int w )//v是G的某个顶点,w是v的一个邻接点,返回v(相对于w)的下一个邻接点(邻接点的index),如果w已经是最后一个邻接点,则返回-1 { int j,p=-1,found=1; for(j=w+1;((j<G.vexnum)&&(found==1));j++) if(G.edges[v][j]!=INFINITY) { p=j; found=0; } return p; } //5、广度优先遍历(主调)--例子 void BFSTraverse_MG( const MGraph &G )//广度优先遍历图 { int v; for (v=0; v<G.vexnum; ++v) visited[v] = false; //初始化访问标志 //开始遍历过程: for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) BFS_MG( G , v ); } //6、以v为起点广度优先遍历(核心函数) void BFS_MG( const MGraph &G , int v )//以v为起点进行广度优先遍历 { queue<int> Q;//定义完队列Q(不需要执行InitQueue_SQ) EnQueue_Sq(Q, v); // v入队列 visited[v] = true; cout<<G.vexs[v]<<" "; while(!Q.empty ()) { int s = DeQueue_SQ( Q );// 队头元素出队 for(int w=FirstAdjVex(G,s);w!=INFINITY;w=NextAdjVex(G,s,w)) if ( !visited[w] ) { visited[w]=true; cout<<G.vexs[w]<<" "; EnQueue_Sq(Q, w); // 访问的顶点w入队列 } // if }//while } void main() { MGraph MG; CreateGraph_MG( MG ); // 打印顶点a的所有邻接点 Dsp_ArjNodes_MG( MG ,3); cout<<"输出广度优先遍历结果:"<<endl; BFSTraverse_MG( MG ); getch(); }

centos7下cpu温度高,系统启动或关机或重启时可能报错。

问题很简单,我的笔记本装了centos7和win10双系统,用wen10时好好的,除非游戏玩久了,不然温度一般是60度左右, 但是我使用centos7只是使用基础命令和进浏览器(学习linux中),电脑就会明显感到温度高,用 sensors看温度平均有将近80度,平均高了十来度的温度。我想知道是不是系统哪里的问题,我系统安装后有点小问题,在重启或关机或启动时可能发生错误,就是屏幕一直输出。不带停的,我只有长按电源强制关机才行。这个错误大部分时候也不会发生。大致是一直输出这些: PCIe bus error :severity=corrected, type=Physical Layer,id=00e8(Recelver ID) receiver Error First device [8086:a118]error status/mask=00000001/00002000 可能刷新的太快还有些信息没看到,就是这几行信息一直输出。 求解决方案。。。。。

一段MATLAB程序运行不出来,不知道哪里出错了,跪求高手解答

%%%%%从o点出发达到目的地 function [chengyong,shuru,wq1,wq2]=gengxin(pfangan,guanxi,tm,chengyong,kchy) %%%若选择的为1-2,选择可供使用的方案(尽量满装) tf=find(pfangan(:,1)<=kchy(1,1)&pfangan(:,2)<=kchy(1,2)); if length(tf)>0 %%%方案存在(可以满装)选用方案tm(1)对tf(1)及其临界点进行装载 zuizhong=[zuizhong;[pfangan(t(1),1:2),]] %%%%对乘用车进行更新 P=[tm(1),guanxi{tm(1)}]; shuru=pfangan(tf(1),:); [chengyong,wq1,wq2]=xiaochu(chengyong,P,shuru); else %%%方案不存在 %%找出方案能运输最多 pp=[kchy(1)-pfangan(:,1),kchy(2)-pfangan(:,2)]; pp=pp.*(pp>0); tpp=fmd(sum(pp')==min(sum(pp'))); %%%%选用tpp(1)中方案对乘用车进行更新 P=[tm(1),guanxi {tm(1)} ]; shuru=fangan(tpp(1),: ); [chengyong,wq1,wq2]=xiaochu(chengyong,P,shuru); end %%%%首先求出1-1和1-2车辆的装载方案数 chengyong1=[4.61;3.615]; jiaoyun1=[19;24.3]; %%%1-1车的装载方案数 fangan11=jisuan(chengyong1,jiaoyun1(1)); fangan1=hebing(fangan11,fangan11); L11=zeros(size(fangan1,1),1); %%%根据装载的车辆总长对方案的进行排序 for i=1:size(fangan1,1) L11(i)=fangan1(i, 1)*chengyong1(1)+fangan1(i,2)*chengyong1(2); end [a,index]=sort(L11); index=index(end:-1:1); pfangan1=[]; for i=1:size(fangan1,1) t=find(index==i); pfangan1=[pfangan1;[fangan1(i,:),t]]; end pfangan1=sortrows(pfangan1,3); pfangan1(1:2,1:2)=pfanganl(2:-1:1,1:2); %%%% 1-2车的装载方案数 fangan21=jisuan(chengyong1(1:2),jiaoyun1(2)); %%第二个车的第二层 fangan22=hebing(fangan21,fangan21); %%%对于第二个车 fangan2=hebing(fangan21,fangan22); %%%根据装载的车辆总长对方案的进行排序 L12=zeros(size(fangan2,1),1); for i=1:size(fangan2,1) L12(i)=fangan2(i,1)*chengyong1(1)+fangan2(i,2)*chengyong1(2); end [a,index]=sort(L12); index=index(end:-1:1); pfangan2=[]; for i=1:size(fangan2,1) t=find(index==i); pfangan2=[pfangan2;[fangan2(i,:),t]]; end %%%%每次选择1辆轿运车1-1和5量轿运车1-2 t1=find(pfanganl1(:,3)==1); t2=find(pfangan2(:,3)==1); %%%%从。点运输的时候,要根据达到A点之前的两个点进行判断 pfangan2=sortrows(pfangan2,3); ss=0; chengyong=[42,50,33,41;31,0,47,0]; juli=[360,280,236,160]; %%%从点。到各个点的距离(最近的距离) guanxi={ [2,4], [4], [4],[]}; p=0; qq=[]; ww=cell(26,1); k=1; jiaoyun=[]; while sum(chengyong(:))>0 %%%当还有需求的时候需要运输 q=zeros(1,4); %%%选择运输的目的(根据距离远近和该点是否有需求) sumch=sum(chengyong); tm=find(sumch~=0); q(1)=tm(1); %% %ttn(1)就是满足要求的点 %%%%找出tm(1)的临街点和t(1)点进行组合 pt=[tm(1),guanxi{tm(1)}]; %%%%找出可供运输的乘用车I和II的数量 if length(pt)==1 kchy=chengyong(:,pt)'; else kchy=sum(chengyong(:,pt)'); end %%%%选择运输方案 %首先,选择使用的车辆(根据20%的限制) if ss>=5 [chengyong,sq,wq1,wq2]=gengxin(pfangan2,guanxi,tm,chengyong,kchy); ss=ss-5; q(2)=2; jiaoyun=[jiaoyun,2]; else [chengyong,sq,wq1,wq2]=gengxin(pfangan1,guanxi,tm,chengyong,kchy); ss=ss+1; q(2)=1; jiaoyun=[jiaoyun,1]; end q(3:4)=sq(1:2); p=p+1; qq=[qq;q]; ww{p}={wq1,wq2}; %%%%wq l表示1型车的卸车点和卸车量 %%%%Wq2表示2型车的卸车点和卸车量 end n=length(ww); www=cell(n,1); for i=1:n a=ww{i}{1}; b=ww{i}{2}; if length(a)}~=0 t=find(a(2,:)==0); a(:,t)=[]; end if Iength(b)~=0 t=find(b(2,:)==0); b(:,t)=[]; end www{i}={a,b}; end %%%%%首先,将每次运输的方案求出 %%%%第一行为1,2 %%%%第二行为对应的数量 c=cell(length(www),1); for i=1:length(www) d=zeros(2,2); b=[www{i}{1},www{i}{2}]; d=[]; for j=1:size(b,2) d=[d,rep(b(1,j),[1,b(2,j)])]; end e=tabulate(d); t=find(e(:,2)~=0); e=e(t,1:2); c{i}=e; end %%%%计算路径 A=zeros(6); A(1,2:end)=[inf,inf,inf,160,infJ; A(2,3:end)=[80,inf,200,60]; A(3,4:end)=[inf,120,104]; A(4,5:end)=[76,inf]; A(5,6)=inf; A=A+A'; lujing=[]; mudi=[]; L=zeros(length(c),1); for i=1:length(c) if length(c{i}(:,1))==1 lujing=[lujing;num2str(0)]; if c{i}(1,1)==1 mudi=[mudi;'A']; else if c{i}(1,1)==2 mudi=[mudi;'B']; else if c{i}(1,1)==3 mudi=[mudi;'C']; else if c{i}(1,1)==4 mudi=[mudi;'D']; end else q1=dijkstra(A,1,c{i}(1,1)+1); q2=dijkstra(A, 1,c {i} (2,1)+1); if q1>=q2 tq=c{i}(2,1); else tq=c{i}(1,1); end if tq==1 lujing=[lujing;'A']; else if tq==2 lujing=[lujing;'B']; else if tq==3 lujing=[lujing;'C']; else if tq==4 lujing=[lujing;'D']; end if q1>=q2 tqq=c{i}(1,1); else tqq=c{i}(2,1); end if tqq==1 mudi=[mudi;'A']; else if tqq==2 mudi=[mudi;'B']; else if tqq==3 mudi=[mudi;'C']; else if tqq==4 mudi=[mudi;'D']; end end if length(c {i}(:,1))==1 L(i)=dijkstra(A, 1,c{i}(1,1)+1); else q1=dijkstra(A,1,c{i}(1,1)+1); q2=dijkstra(A, 1,c{i}(2,1)+1); l1=min(q1,q2); if q1==l1 l2=dijkstra(A,c{i}(1,1)+1,c{i}(2,1)1l); else q2==l1 12=dijkstra(A,c{i}(2,1)+1,c{i}(1,1)+1); end L(i)=q1+q2; end end ceng=zeros(length(www),2); wceng=zeros(length(www),4); flag=1; %%%% for i=1:length(www) for j=1:size(www{i}{1},2) ceng(i,1)=ceng(i,1)+www{i} {1} (2,j ); end for j=1:size(www{i}{2},2) ceng(i,2)=ceng(i,2)+www{i}{2}(2,j); end if sum(ceng(i,:)-[4,5])==0 wceng(i,:)=[0 5 4 0]; else if sum(ceng(i,:)-[8,0])==0 wceng(i,:)=[4 0 4 0]; else if sum(ceng(i,:)-[15,0])==0 wceng(i,:)=[10 0 5 0]; else if sum(ceng(i,:)-[[6,12])==0 wceng(i,:)=[0 12 6 0]; else if surn(ceng(i,:)-[6,2])==0 wceng(i,:)=[2 2 4 0]; else if sum(ceng(i,:)-[12,4])==0 wceng(i,:)=[10 0 2 4]; else if sum(ceng(i,:)-[3,5])==0 wceng(i,:)=[3 0 0 5]; else flag=0; end end xlswrite('d:shuju.xls',jiaoyun','A1:A26'); xlswrite('d:shuju.xls',wceng,'C1:F26'); xlswrite('d:shuju.xls',lujing,'Gl :G26'); xlswrite('d:shuju.xls',mudi,'H1:H26');

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

你以为这样写Java代码很6,但我看不懂

为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码。下面这一行代码(出自大牛之手)据说可以征服你的朋友,让他们觉得你写的代码很 6,来欣赏一下吧。 IntStream.range(1, 5).boxed().map(i -&gt; { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

Pandownload 开发者被抓了,但是其背后,百度难道不需要反思吗?

loonggg读完需要4分钟速读仅需 2 分钟昨天晚上,一个重磅消息迅速占据了微博的热搜榜,刷爆了程序员的微信朋友圈。因为:Pandownload 的开发者被抓了。Pandownload...

立即提问
相关内容推荐