java 板


LINE

byte i = -1; System.out.println(写在这里); 输出为127,在禁止左移运算手动清除bit 7的情况下,how? 谢谢。 ======================= 编辑分隔线 =========================== 目前推文仍没有完善的方法。理由我想还是把故事交代一下。 此刻我的电脑正在跑 33 Queens puzzle,只需求出一个正确解。 33 Queens 的题目为 8 Queens 的延伸, 多一个条件且只需求一个正确解。 但姑且不论多出条件的内容为何,仅讨论资料结构。 由於 8 Queens 的 8 在一个 int 的位元数之内, 所以很容易以位元运算来加速求解。 比如: 以 left 变数 代表左移一位的遮罩, center 变数 代表中路的遮罩, right 变数 代表右移一位的遮罩, 以 b 变数代表此列皇后摆放後已经设立起唯一一个bit的值。 4者皆为 int 变数。 於是乎 ((left | b) << 1) | (center | b) | ((right | b) >> 1) 传进入recursion,就是下一列皇后不可摆放的遮罩。 现在问题就出现在 ((right | b) >> 1) 的 >> 1 上面, 在不使用long资结情况下 ... 注:其实题目N Queens最高不超过1000,看你能给出最高多少的一个正确解。 我先取 N 为 13,并使用资结为 byte[] 的方式, 以array展开我所需要的 right 变数, 并定义了一个 class Row { private int n; private int sz; private byte[] ary; } 其中的一个shiftRight() method,代表右移一位的 method, 所以我只要 public Row shiftRight() { Row row = new Row(n); byte[] rowAry = row.getAry(); boolean carry = false; // 是否跨过边界的借位 for(int i = sz - 1; i >= 0; --i) { rowAry[i] = ary[i] 右移一位 并 or ((carry?1:0) << 7); if((ary[i] & 1) != 0) { carry = true; } else { carry = false; } } ... 一些处理 ... return row; } 上述 ary 是原本没右移的值,这个method会回传一个新的row。 我必须解决的是把上面"右移一位"写成程式。 由於 bits 运算的 domain 是在 int 层次以上的, byte 去移位 >> 或 >>> 得出的型别是 int, 於是乎使用 >>> 原本可以达到目的,但碰到 byte 得出的却会是 byte i = -1; i >>> 1 会是 2147483647,强转 byte 会变成 -1。 我是可以将 byte [] 改成 int [] 然後使用 >>> 但跨边界是 33 起跳,对於 NP-Complete 的题目, 在不确定改code一定是对的情况下,不这麽贸然行事。(会很久,没骗你) 目前以 byte[] 来做跑 13 跨界的确定答案为正确。 上述右移一位的code我是以手动清除来做。 ((ary[i] >> 1) & ~(1 << 7)) | ((carry?1:0) << 7); 但多一个运算即使是 bits 运算,还是会推慢速度,故 po 文寻求解法。 感谢提供解法的板友,在我跑完 byte[] 後,改 int [], 这问题就不复存在。不过还是好奇能否有完善的改法,谢谢。 2014/10/26 22:20 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.203.156
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1414317110.A.7E4.html
1F:推 psplay: JAVA板变成温馨作业版了 赞 10/26 19:08
2F:→ bleed1979: 我只想知道有没可能办到。 10/26 19:23
3F:→ ssccg: >>> 10/26 20:21
4F:→ pico2k: 1:(-1)&0x7f 2:(-1)>>>25 10/26 21:08
感谢两位版友推文。 ※ 编辑: bleed1979 (220.135.203.156), 10/26/2014 22:21:39
5F:推 cowbaying: 有没有考虑使用位元运算子? 10/27 11:03
6F:→ cowbaying: 推文已经解答了 XDDD 10/27 11:04
7F:→ cowbaying: 帮& 10/27 11:05
8F:→ bleed1979: 加and手动清除多ㄧ次运算。但就是要省。 10/27 12:21







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灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP