Prob_Solve 板


LINE

※ 引述《tropical72 (藍影)》之銘言: : 下述說明, array index start from 0. : 不知道這有沒有明確定義的名詞 < 其實是在排列演算法裡面看到的 >。 : 現假設一 arr[] = {6,3,4,5,1,2}; : 中介數 n[i] 代表 arr[i] > arr[j] ( for j>i) 之個數, : 白話點,就是元素 a[i] 以右,比 a[i] 還大的個數。 : 以 n[1] 為例,arr[1] 右邊比 arr[1] 大的數有 2 個, n[1]=2; : n[2] ,arr[2] arr[2] 1 , n[2]=1。 : ---- : 這裡做幾個前提假設 : a. 假設 array 數值分佈為 [1,n] 或 [0,n-1] : b. 每個數都剛好會出現一次。 : 問題有三個 : 1. 有辦法快速知道 n[] 值嗎? (可接受額外空間) : 目前作法是 : : for(i=0; i<size; ++i) : for(n[i]=0, j=i+1; j<size; ++j) : n[i]+=(arr[j]>arr[i]); : 因這動作非常頻繁,不知是否有其他作法? 硬爆: 把動作抽象化:我們需要一個支援如下操作的集合S - 動態增(刪)一個數字 - 查詢比 k 小的數字有幾個 那上述迴圈改為 S ← {} for i = n down to 1 n[i] = 查詢 S 中有幾個數字 < a[i] 把 a[i] 加入 S S可以用平衡樹或Binary Index Tree(BIT, 好寫)實現. 或者, BIT 可以維護 [1,i] i≦n 的資訊, 也可以變成維護 [i,n], 1≦i 我們把 a[] 的數字由小到大處理 v[1...n] = 0 for k = 1 to n let a[i] be the kth smallest number in a[] n[i] = 求和: v[i+1...n] v[i]++ 其中 v 可以用 segment tree(???這名稱我不確定 反正對岸稱為線段樹)或 BIT 維護 其實跟上面方法一樣意思...... : 2. 怎麼再解碼回去? (可接受額外空間) : 若 n[] = {1,0,2,1 } ; 我該怎麼解碼解成 : arr[] = {4,5,3,1,2} 或 {3,4,2,0,1}? : const int size=5; : char used[size]={0}; : int i, j, cnt; : for(i=0; i<size-1; ++i){ : cnt = 0; : for(j=size-1; cnt!=n[i]; --j) : if(used[j]==0) ++cnt; : arr[i] = j, used[j]=1; : } : // 最後還要查一次沒用到的 : for(i=0; i<size && used[i]; ++i) ; : arr[size-1] = i; : 目前想法也是豬頭想法,只差無限猴子定理沒搬出來做, : 不知能否有些技巧? 一樣,把要什麼動作寫出來可以知道哪邊可以加速 (註:這個同 http://uva.onlinejudge.org/external/115/11525.html ) S = {1, 2, ..., n} n[] 為輸入的編碼 for i = 1...n a[i] ← S 中第 n[i] 小的數字 從 S 中移除 a[i] 所以我們的 S 需要: - 求出第 k 大的數字是什麼 - 刪除任一個數字 一樣, S 用任一種平衡樹都可以, 用 segment tree 也可以, BIT 上二分搜也可以 BIT上二分搜大致是: BIT紀錄<=k的數字有幾個, 然後對這個二分搜找到所需的數字是誰 附上以前寫的程式碼, 但是當時亂寫的, 只是稍微加快了原先 O(n^2) 的算法, 並不是 O(n lg n) / O(n lg n lg n) 的做法... http://pastie.org/3328428 當時記的好像是"已經刪掉了幾個數" : 3. 假設不成立時,中介數之編解碼是否該重新設計? : 倘若 假設 a. array 數值分佈為 [1,n] 或 [0,n-1] 不成立, : 唯一確定的是 array 元素保證兩兩相異,試問還有什麼技巧可完成? 預處理把 a 中每個數字是第幾大的算出來, 範圍就變 [1,n] : ---- : 這篇發得很像作業文,但純粹是個人進修卡住, : 希望各位先進能不吝給個意見。 : 懇請不吝賜教,小弟感激不盡。 突然發現跟 #1E06h4Uk 有類似處... --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.33.242
1F:推 tropical72:先推再說,謝謝回覆指導 ^^ 02/07 00:42







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

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

TOP