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/m.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燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP