java 板


LINE

是这样的,最近碰到了一个资料排序的问题 假设我有A、B两个array的资料 资料(4,10),是做一个动作持续4秒,後delay10秒 而A的array会先做而B会跟A的动作做比较如果B 如果B做一个动作和delay的时间比A的delay时间短 则可以插入到A的delay时间中,减少时间的浪费 而A的一个动作做完移至到B需要两秒的时间(B移动到A也需要两秒时间) 这个时间也要包含进去,需要达到密合的动作 没办法A或B的delay时间到了,却还在做别的动作 A B -------------- -------------- | (4,10) | | (2,2) | -------------- -------------- | (4,10) | | (2,20) | -------------- -------------- | (2,5) | | (2,5) | -------------- -------------- 如果B可以插入到A中做排序则可以得到C得array C -------------- | (A,4) | -------------- | (B,2) | -------------- | (delay,2) | -------------- | (B,2) | -------------- | (A,4) | -------------- | (delay,10) | -------------- | (A,2) | -------------- | (delay,2) | -------------- | (B,2) | -------------- 反之,如果没办法排序的话则会得到A动作做完再做B动作的array 想请问各位高手...这有甚麽方法可以解决.. 我想了很久完全想不到有甚麽解决的办法Orz. --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.82.82
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1472784265.A.CE2.html
1F:→ steven11329: 看起来像os排程的问题 09/02 10:49
2F:推 v9290026: 思考中,请问由a移到b的过程中,b可以做事吗 09/02 13:21
不行...a移动到b点後,b才能做事,且这时a需处於delay的时间或a已完成动作QQ
3F:推 Jichang: 不就是 b.runtime+4 < a.delay 就可以把 b 插进去? 09/02 14:58
那...B的delay时间呢...假设b的delay时间结束了但a的动作还没做完这样也不成立.. 因为没办法马上执行b的动作..
4F:推 v9290026: 我写好了,但是丑丑的需要重构,先把重构前的版本寄给你 09/02 15:15
5F:→ v9290026: 给我信箱吧~ 09/02 15:16
6F:→ v9290026: 逻辑上是去塞A之间的slot,判断能不能塞入0~到多个B的工 09/02 15:17
7F:→ v9290026: 作 09/02 15:18
大大 我寄信给你了QQ
8F:→ gene07: 收到了 我研究看看 谢谢大大 09/02 15:39
大大会有问题..如果A动作的delay去做B动作...那B动作的delay时间也不能超过QQ 假设我给参数是这样 schedule.addtask(new Task(2, 20, 'A')); schedule.addtask(new Task(8, 10, 'A')); schedule.addtask(new Task(10, 15, 'A')); schedule.addtask(new Task(12, 10, 'A')); taskBs.add(new Task(2, 2, 'B')); taskBs.add(new Task(12, 10, 'B')); taskBs.add(new Task(22, 3, 'B')); taskBs.add(new Task(12, 50, 'B')); 得到的结果是A B B A A A B B taskBs.add(new Task(12, 10, 'B')); 的delay只有10秒 可是他却把 schedule.addtask(new Task(10, 15, 'A')); schedule.addtask(new Task(12, 10, 'A')); 都执行完了 这样就超过B的delay10秒.. 所以应该得到的排序结果是A A A A B B B B才对QQ"
9F:推 v9290026: b动作的delay也要卡喔?我以为这段是看结束时间加返回 09/02 18:01
10F:→ v9290026: 时间及好了,我晚点再修一下 09/02 18:01
11F:推 v9290026: 这样b的动作跟delay有啥分别?可以把两个变数加总当作一 09/02 18:12
12F:→ v9290026: 个吗 09/02 18:12
b的动作需在a的delay内做..而a的动作需要再b的delay内做.. 而假如a的delay结束後,就要执行下一个a的动作不能因为在执行b的动作 就耽误到a的动作..反之b也是如此 只要会耽误到a或b的动作 就没办法去做排程QQ..
13F:→ v9290026: 我想了想你的需求,用heuristic的方式似乎无法解.. 09/02 20:09
14F:→ v9290026: 有可能当下看这个工作可以排进去,但是往下做几步後产生 09/02 20:10
15F:→ v9290026: 卡delay... 09/02 20:10
往下做几步後卡delay??如果卡delay就是A做完在换B做.. 所以我的意思是两个排完後才执行动作QQ...应该会有一个array来暂存正在排序的动作
16F:→ ssccg: 你的时间单位都是整数吗? 09/02 20:33
17F:→ gene07: 是的 都是整数……Orz 09/02 20:35
※ 编辑: gene07 (36.230.203.80), 09/02/2016 21:13:18
18F:→ pttworld: 多背包多物品。贪婪解应该可以,最佳解就。。 09/02 23:44
19F:推 cowbaying: 为什麽执行後要延迟? 是持续执行吗? 09/03 03:42
20F:→ cowbaying: 这样设计迟早DEAD LOCK 09/03 03:42
21F:→ cowbaying: 这做即时排序就好了 一开始看A要先还是B先 09/03 03:46
22F:→ cowbaying: A执行时把B的清单拿来加在B後面 09/03 03:47
23F:→ cowbaying: B执行到最後面的时候把A的清单拿来加到後面 09/03 03:47
24F:→ cowbaying: 反覆执行不就好了? 09/03 03:47
25F:推 cowbaying: 我觉得你的问题可能是没有主回圈做时间检测 09/03 03:54
26F:→ cowbaying: 依我看至少要两条执行绪 09/03 03:55
27F:→ cowbaying: 主 + 执行 或是 主 + A执行 + B执行 09/03 03:55
28F:推 cowbaying: 另外你的排序结果应该是A B A A A B B B 才对 09/03 04:00
29F:→ cowbaying: 第一个B是可以排进去的 09/03 04:00
30F:→ gene07: 可是b排进去的话 b的delay结束了 却还在做a的事情 这样就 09/03 14:31
31F:→ gene07: 不行了…… 09/03 14:31
32F:→ cowbaying: 没有吧 是你的规则不够详细还是我搞错了什麽? 09/03 14:38
33F:→ cowbaying: B(2,2) 执行完 A还在DELAY中 没有问题吧 09/03 14:39
34F:→ cowbaying: 此时没有可以插入的程序 就是等A1 DELAY完接着A2 09/03 14:40
35F:→ cowbaying: 如果连A DELAY的时间都算执行时间 那麽你一开始把B 09/03 14:42
36F:→ cowbaying: 插到A DELAY的时间区段来执行 我就搞不懂了 09/03 14:43
37F:→ cowbaying: 如果没有明确的说明规则 我们其它人只是在陪你鬼打墙 09/03 14:44
我的意思是.. (2, 20, 'A')-->A做完後delay20秒(20秒内会做:往B移动2秒+B动作2秒+B delay2秒+ B的第2个洞做12秒+回A的动作2秒) (2, 2, 'B') (12, 10, 'B')-->(因为这边跑到A後需要两秒 所以B delay只剩八秒) (8, 10, 'A') -->(而A若做完8秒的动作在+跑去B所需的两秒就超过B所剩的8秒delay) 就没办法做排序了..
38F:→ ssccg: 原po的意思是,A不能被B delay,B也不能被A delay 09/03 14:46
39F:→ ssccg: 所以单独对A或B来说根本不是分成多个工作,而是一整组固定 09/03 14:47
40F:→ ssccg: 时间在执行、固定时间可空出来的工作 09/03 14:48
41F:→ ssccg: B(2,2)执行完马上就该执行B(12,10),然後B跑一半A的delay就 09/03 14:54
42F:→ ssccg: 会结束所以不行,其实这组参数B(2,2),B(12,10)势必要一个 09/03 14:55
43F:→ cowbaying: 他第一个A的DELAY不是20秒吗? 09/03 14:56
44F:→ ssccg: 18单位的空间,只能插在A(2,20),算是能很简单计算的例子 09/03 14:58
45F:→ ssccg: 把B插在T2,之後在T40 A(10,15)要执行时,B正在B(22,3)执行 09/03 15:00
46F:→ ssccg: 中(T28~T50),当然不行 09/03 15:01
47F:→ ssccg: 算错,把B插在T4才对,上面是(T30~T52) 09/03 15:02
48F:→ ssccg: 基本上这个问题可以转化成 09/03 15:09
49F:→ ssccg: 两个序列比对,但是这样时间复杂度太高了 09/03 15:18
50F:→ ssccg: 其实原问题的描述不太合理,整个序列是固定的,感觉根本没 09/03 15:24
51F:→ ssccg: 有拿个别执行段来估算的空间,既不能延迟也不能提早 09/03 15:25
52F:→ ssccg: 原PO你这段解释又多出一个问题,为什麽B(12,10)回A刚好接上 09/03 15:53
53F:→ ssccg: ..我又看错了,所以在T30 A结束要等T32 B才能开始 09/03 15:57
54F:→ ssccg: (T30~T52)插不进去 09/03 15:57
...是的 ※ 编辑: gene07 (36.230.203.80), 09/03/2016 15:59:03







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP