留言板

如果各位對本站有任何意見,歡迎在此頁面留言。

  1. DJWS
    2008/6/24 於 17:27 | #1

    身為板主應該也是可以回應的吧?

  2. shik
    2008/6/28 於 12:41 | #2

    偷偷踩一下

    賀新居落成XD

  3. DJWS
    2008/6/29 於 10:26 | #3

    歡迎歡迎呀。 : )

    你貼了這則迴響之後,
    我才發現原來迴響得要版主同意才會發佈,
    於是我趕快去調整了一下網誌的設定,
    現在不管是誰都可以馬上看到自己的迴響囉!

  4. jrfan
    2008/7/1 於 21:26 | #4

    想問一下版主你的<code></code>,是自已在.css做的嗎?
    還是有其他現成的樣板

  5. jrfan
    2008/7/2 於 6:59 | #5

    不好意思,我在wordpress.com裡找到了@@”

  6. DJWS
    2008/7/2 於 14:34 | #6

    我是在wordpress.com的FAQ裡面找到的:
    http://faq.wordpress.com/2007/09/03/how-do-i-post-source-code/

  7. 2008/7/3 於 9:30 | #7

    DJWS,恭喜晉升Web2.0 XD

    關於您所寫的LCS很棒,

    但有一點我有疑問 可能是筆誤

    在計算LCS長度中:
    # for (int i=1; i<=seq1_length; i++)
    # for (int j=1; j<=seq2_length; j++)
    # if (seq1[i] == seq2[j])
    // 這裡加上的 1 是指 ch1 的長度為 1
    array[i][j] = array[i-1][j-1] + 1;

    seq1和seq2若從i=1,j=1開始 那seq1[0] seq2[0]就無法計算了..

    另外您那行駐解可以說清楚一點嘛 有點難理解xd

  8. DJWS
    2008/7/4 於 16:57 | #8

    程式碼我改好囉,不過註解我倒是沒改。因為該程式碼是計算LCS的長度,而非LCS,所以遇到ch1的時候,就改為+1囉。

    文章已經發佈在網誌上,歡迎移到該文章下繼續討論。 :)

  9. su_horng
    2008/7/5 於 0:02 | #9

    我該不該把我的連結改成連結這個網頁?
    還是http://www.csie.ntnu.edu.tw/~u91029/的舊址?

  10. DJWS
    2008/7/5 於 12:30 | #10

    都可以呀!我已經設定好轉址了,所以不管是用哪一個連結,最終都會到達一樣的網頁。:)

  11. 2008/8/16 於 2:24 | #11

    您好,我是來自湖南師大附中的一名高二學生,現為Vijos的管理員.
    Vijos現為大陸最大的信息學奧賽(英文縮寫為OI,面向中學生,與ACM/ICPC區分開來)在綫評測網站(OJ),在OI領域有著較大的影響力.
    您的ZeroJudge是我最近在搜索測試數據(測資?)的時候意外發現的.我們希望能夠與您合作,辦一次難度適當的比賽.不知道您的看法怎樣?
    期待您的回復…

  12. 2008/8/16 於 9:42 | #12

    你好,

    ZeroJudge並不是我架設的OJ。
    不過我曾跟ZeroJudge的管理員通過信,
    這是管理員的email:jiangsir@tea.nknush.kh.edu.tw
    您可以直接聯絡他,洽詢比賽事宜。 :)

  13. 2008/8/16 於 11:03 | #13

    非常感謝.

  14. 2008/8/16 於 22:46 | #14

    原來搬新家了

    祝賀站運昌隆

    我很羨慕會演算法的coder(因為我自己不會)

    所以, 期待有更多關於介紹演算法的好文

    GOGO~~

  15. 2008/8/16 於 22:52 | #15

    嗚…

    迴響所填寫的email和URI並不會顯示耶

    我本想偷打廣告一下的

    好可惜…

    不過沒關係啦

    對了, 前面討論到的LCS 在wiki有碼 可以參考看看

    http://en.wikipedia.org/wiki/Longest_common_subsequence_problem

  16. 2008/8/17 於 7:33 | #16

    URL沒有顯示,不過直接點選使用者ID可以連到URL所在的網頁。email我就不知道為什麼沒有顯示了。

    說到LCS,這裡再提供一份教學講義:http://www.csie.ntnu.edu.tw/~ice_acm/course/08032003/LCS.doc。

  17. 匿名
    2008/8/21 於 15:53 | #17

    版主 您好:
    sorry 請教一下,小弟印象中你有很多不錯的文章,像是算 點到點,或是線到線的距離,或是算凸包的算法,可是新版中我沒找到,請問版主可否告知怎麼找到那些文章

  18. 2008/8/22 於 7:07 | #18

    以前發表過的文章都放在這裡:
    http://www.csie.ntnu.edu.tw/~u91029/menu.html
    你想找的點對點、線對線距離,以及凸包的演算法,
    可以在此頁面最下方的Computational Geometry欄位中找到。

    該連結也可以在網誌的右方選單找到:

    友站連結
    * 美麗 C 世界
    * DJWS的網路日誌─主選單 <--這裡
    * Lucky貓的ACM園地
    * Sagit’s C++ 程式設計

    網址更動之後,因為沒有在新網誌上特別提醒過,所以不太好找。不好意思啦。 (^_^”)>

  19. WillWin
    2008/8/24 於 23:41 | #19

    你好,你的網站資料很豐富XD
    不過有小地方寫錯了
    http://www.csie.ntnu.edu.tw/~u91029/EnumerateAllSubsets.html
    最下面的演算法應該更正為

    1. int array[5] = {6, 7, 13, 4, 2}; // 可自行調整列舉順序
    2. int subset[5]; // 用來存放一組可能的答案
    3.
    4. void recursion(int n, int N) // n是現在正在列舉的數值
    5. { // N用來記錄子集合的元素個數
    6. print_solution(); // 目前湊出來的集合
    7.
    8. for (int i=n; i<5; ++i)
    9. {
    10. // 加入 array[i] 這個數字 //原本寫成加入 array[n] 這個數字
    11. subset[N] = array[i]; //原本寫成subset[N] = array[n];
    12.
    13. // 然後繼續列舉後面的數字
    14. recursion(i+1, N+1);
    15. }
    16. }
    17.
    18. int main()
    19. {
    20. recursion(0, 0);
    21. }

    不然跑出來不是正確解答

    嗯嗯

    這篇還有印象吧
    http://online-judge.uva.es/board/viewtopic.php?f=40&t=42251&sid=4cc332703e149e0ad220315f3dbe5e31

    我已經找到錯誤了

    謝謝

  20. 2008/8/25 於 0:44 | #20

    感謝你!程式碼已經修正好囉。
    你在討論板的那篇問題我也有看到了。 :)

  21. noob
    2008/9/3 於 23:57 | #21

    請問站長大:
    http://www.csie.ntnu.edu.tw/~u91029/0-1KnapsackProblem.html中
    “找出所有的配置物品的方式”的範例程式裡的find_path是不是少了跳出條件?
    感謝m(_ _)m

  22. 2008/9/4 於 11:33 | #22

    對耶,竟然少了跳出條件。
    我改好了。謝謝你啦! :)

  23. noob
    2008/9/4 於 23:35 | #23

    http://www.concretevitamin.com.cn/informatics/Pack/Index.html
    大陸網友寫的背包問題詳解
    提供給站長參考:P

  24. 2008/9/5 於 21:07 | #24

    系統竟然把你的留言當成是廣告留言了。好家在有看到。
    謝謝你提供的連結,有機會我會好好看看的。 :)

  25. 2008/9/17 於 14:49 | #25

    DJWS大您在flow – Max-Flow Min-Cut Theorem 說道:

    由源點側流入到匯點側的水流總流量,
    一定會小於等於由源點側穿越到匯點側的管線總容量。反方向亦同。﹞

    我覺得有點奇怪 源點側流入匯點側不就是源點側穿越匯點側嗎 還是有什麼不同@@?

    (flow的圖超多的 辛苦辛苦 > <)

  26. 2008/9/17 於 15:00 | #26

    還有在Flow:Ford-Fulkerson Algorithm想法的附圖
    出現兩個標示為One Little Flow的圖 , 應是筆誤吧:D

  27. 2008/9/17 於 20:01 | #27

    其實我用了「流入」和「穿越」這兩個詞,並不是要強調兩者有差別,只是希望文句能夠活潑一點。不管是「流入」和「穿越」,我選用這些詞,是想要指出那些管線位於Cut上面,而且有方向性,是由源點側到匯點側。既然會造成誤解,所以現在我把「穿越」二字改為「橫跨」二字,文意上應該會清楚許多。

    圖片修正好了,確實是筆誤。謝謝提醒啦。 :)

  28. 2008/9/30 於 20:45 | #28

    您好,其實我只想說,這是一個非常棒的網站XD
    我剛開始接觸ACM沒多久,已經多次從Google上面搜尋到此站的片段資料,覺得寫的很清楚易懂。今天才發現,原來是這樣的一個豐富完整的網站。

  29. 2008/9/30 於 23:42 | #29

    謝謝你。希望這個網站對你有幫助。
    我會努力讓這網站變得更豐富的。 :)

  30. Yu Han
    2008/10/10 於 7:54 | #30

    http://www.csie.ntnu.edu.tw/~u91029/GreatestCommonDivisor.html
    下面Binary GCD的最後一個程式的第9,10行和11,12行重複了,是故意的嘛?

    http://en.wikipedia.org/wiki/Binary_GCD_algorithm#Implementation_in_C
    這個版本有些其他的加速技巧。

  31. Yu Han
    2008/10/10 於 8:07 | #31

    http://www.csie.ntnu.edu.tw/~u91029/ArticulationVertex.html
    最下面的程式,第七行的vant是va嘛?

    另外,我認為va應該是不需要用陣列的。因為每個點只需要其相鄰節點的va值來比較,所以只要利用函式回傳值,就可不用儲存va。

  32. 2008/10/10 於 10:54 | #32

    Binary GCD Algorithm我已經修正好了。如果我的網站內容有錯,那絕對不是故意的。有時候寫文件寫久了常常會疲倦、分心,所以常會有莫名其妙的狀況(尤其是程式碼)。也請各位多多包涵。

    Wikipedia所記載的Binary GCD Algorithm實作,我會再研究看看(我可能有看過但因為複雜而沒有收錄,要不然就是我寫的時候Wikipedia當時還沒有相關資訊),目前我已經將網頁超連結放在文件之中。

    Articulation Vertex的程式碼是筆誤,已修正。很明顯地,這呼應了我剛剛所說的。 : p

    要實作va的概念,的確可以不需要用到陣列,改用函數回傳值也是可以的。不過我不知道哪一種會比較快、比較好就是了。感謝你提供這個想法。過一會兒,我會補上改用函數回傳值的程式碼,供大家參考。

    最後,我不知道為什麼擋廣告留言的程式又把你的留言給擋住了。看來WordPress對於廣告防治有點太積極了。

  33. Yu Han
    2008/10/10 於 13:09 | #33

    我猜是因為有連結的關係,因為廣告幾乎都是有連結的。

  34. 2008/10/10 於 16:11 | #34

    WordPress管理介面有個選項可以調,我把它調成要出現五個連結以上才封鎖,結果還是常有踰矩攔截的問題。我猜可能他還有另外一種判定廣告的機制,再加上WordPress是英文系統,不認得中文字的關係吧。當然也有可能是擋廣告系統特別喜歡你的緣故。 : )

  35. Yu Han
    2008/10/10 於 21:37 | #35

    http://www.csie.ntnu.edu.tw/~u91029/Flow.html
    從中找出一個最小割的程式中第20行的p是不是應該是visit?

  36. 2008/10/11 於 7:42 | #36

    你說的沒錯,是visit才對。謝謝你的提醒。 :D

  37. Eric
    2008/10/20 於 13:31 | #37

    你好
    因為最近修課的關係開始寫一些比較popular的C++問題
    但因為自己程度很弱= =”
    所以上網看到你這個很棒的網站!!!

    可以請你在TSP(Travelling Salesman Problem)
    的註解多寫一點嗎? 動規的方法我看不太懂
    所以我想要只用Brute Force search寫
    但Brute Force Search 最下面那段for我不大能理解= =”

    感謝你

  38. 2008/10/20 於 15:58 | #38

    你提到的這個問題大約在半年前有人就跟我提起過了。我是很想把它寫得更詳細一點,但是目前沒有辦法馬上完成這件事情,因為我手上還有很多正等著要寫出來的主題。非常抱歉。

    如果一切順利的話,一旦我完成了目前正在編纂的網路流(flow)問題之後,接下來會是匹配(matching)問題,然後會補上Optimal Assignment Problem、Chinese Postman Problem、Travelling Salesman Problem的動態規劃解法。然後會轉向著手編寫一些特殊資料結構的文章,以及字串比對演算法的文章。不過我想這時候我應該已經被徵招入伍了。

    至於Travelling Salesman Problem的其他解法,像是基因演算法、螞蟻演算法,至少要等到退伍之後才有辦法寫。

    最後是回應你的問題:如何用暴力法解TSP?你可以嘗試使用回溯法(backtracking)來解,只要把所有可能的路徑都列出來就可以了。回溯法是一個眾所皆知的TSP解法,網路上應該有不少資料,你可以試著多找找看,說不定連程式碼也都能找到。: )

  39. Eric
    2008/10/20 於 20:36 | #39

    非常感謝你的回答

    你這個網站很棒!!
    幫助我非常多

    要繼續加油唷!!!!!

  40. 2008/10/22 於 22:13 | #40

    我會的。 :)

  41. noob
    2008/11/3 於 15:32 | #41

    m(_ _)m
    http://www.csie.ntnu.edu.tw/~u91029/GreatestCommonDivisor.html
    請問這裡面的擴充”歐基里德法”裡的”Iterative”的範例程式碼是不是要改成
    1. int gcd(int a, int b, int& i, int& j)
    2. {
    3. int i_ = 1, j_ = 0, c = a, d = b;
    # i = 0, j = 1;
    4. while (true)
    5. {
    6. int q = c / d, r = c % d, t;
    7. if (r == 0) break;
    8. c = d; d = r;
    9. t = i_; i_ = i; i = t – q * i;
    10. t = j_; j_ = j; j = t – q * j;
    11. }
    12. return d;
    13. }
    不然會重複宣告

  42. 2008/11/3 於 22:00 | #42

    已修正。謝謝。 : )

  43. su_horng
    2008/12/9 於 21:54 | #43

    提供一下GCD(a,b)=ax+by的迴圈解


    int gcd(int a, int b) {
    int r;
    while (b) {
    r = a%b;
    a = b;
    b = r;
    }
    return a;
    }

    得到
    int gcd(int a, int& x, int b, int& y) {
    int r, d; int A[2]={1,0}, B[2]={0,1}, R[2];
    while (b) {
    d = a/b;

    r = a – b*d;
    R[0] = A[0] – B[0]*d;
    R[1] = A[1] – B[1]*d;

    a = b;
    A[0] = B[0]; A[1] = B[1];

    b = r;
    B[0] = R[0]; B[1] = R[1];
    }

    x = A[0];
    y = A[1];
    return a;
    }

  44. su_horng
    2008/12/9 於 22:03 | #44

    對不起冒泡了XD

    剛剛才注意到

    請不要理會上面那篇

  45. 2008/12/12 於 11:26 | #45

    呵呵,了解。

  46. karen
    2008/12/13 於 4:04 | #46

    Bonjour
    我是在找最小生成樹而發現你的blog
    謝謝你 讓我了解 我上課都在上什麼
    (因為都講法文 老師講話超快的)
    請你繼續努力 幫助更多無助的人
    真的是佛心來的

  47. Cowardz
    2008/12/19 於 9:34 | #47

    您好, 請問你會補 huffman compression algorithm 的 CODE嗎?
    謝謝..

  48. 2008/12/27 於 20:04 | #48

    To karen,
    謝謝。等我退伍之後我會繼續努力的!

    To Cowardz,
    一年內不會。

  49. 2009/2/10 於 14:05 | #49

    這應該是我認識的 DJWS 沒錯吧?

  50. 2009/2/28 於 10:29 | #50

    對呀就是我!

  51. Szu
    2009/3/25 於 23:57 | #51

    大大您好
    因為最近修課正好在修演算法
    遇到問題的時候上網看了一些您的解法感覺收穫真的很多
    最近卻在銷售員問題上卡住了(Travelling Salesman Problem)

    看到上面也有人提到
    不過卻找不到資料在哪
    可以請大大在提供一下借小女子參考嗎

  52. 2009/4/4 於 9:58 | #52

    我都是去書店和圖書館找書,以及用google找資料的。用google找資料是最方便的,關鍵字打進去,從第一個連結開始點進去找,找過三、四十個連結之後,資料差不多就齊全了。至於看不看得懂又是另一回事了。

  53. 2009/5/3 於 20:40 | #53

    hello, 你大概已經回部隊了, 在PTT上的文章 – 10290
    我用取巧的方式AC了, 詳情可以上PTT看一下

  54. Yu-Han
    2009/5/30 於 21:10 | #54

    Maximum Consecutive Sum的演算法是不是就是Kadane’s Algorithm?這可以推廣到二維n*n矩陣,我覺得蠻有趣的。
    如果輸入的是0-1矩陣,在找maximum submatrix,似乎也存在有類似解Largest Empty Rectangle的算法。

  55. 2009/5/30 於 23:28 | #55

    看起來是的!最大連續和的演算法就是 Kadane’s Algorithm,不過我是現在才知道這演算法原來有個名字。

    我記得UVa有一、二、三維的題目,我會把相關的資料整理一下,然後放到網頁上。另外我決定把 Maximum Consecutive Sum 改成 Maximum Subarray,後者應是正式的名稱。

    感謝你提供的資訊,實在是惠我良多。:)

  56. Yu-Han
    2009/5/31 於 9:41 | #56

    Maximum 0-1 submatrix的線性算法:
    http://www.ddj.com/184410529?pgno=1
    似乎跟Largest Empty Rectangle有點像?

  57. 2009/6/14 於 2:30 | #57

    我想應該會非常像。因為Largest Empty Rectangle其實就是Maximum 2D Subarray的特例。至於Maximum 0-1 Submatrix根本就是Largest Empty Rectangle了。

    等到有長假時再來補充一下吧!

  58. Yu-Han
    2009/7/7 於 23:50 | #58

    關於Josephus problem應該有不少有效率的方法吧,像是用搜尋樹或是遞迴公式。
    http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.5.177

  59. Alui
    2009/7/10 於 9:27 | #59

    Josephus problem
    N個人 用DP解決只要O(N)很快了阿
    搜尋樹或是遞迴公式 也要 >= O(N)

  60. 2009/7/12 於 9:54 | #60

    搜尋樹是怎麼個作法?

  61. Yu-Han
  62. 2009/7/12 於 23:35 | #62

    我粗略看了一下,這兩篇所提的方法的時間複雜度都是O(nlogn)。於是我猜這些方法應該類似於:把1到N的數字丟進binary search tree,然後進行N-1次的刪除動作。如此也是O(nlogn)。

  63. 2009/7/18 於 7:54 | #63

    可以請問版主未來的動向嗎?

    我本來想走純軟,精進演算法則,
    但是台灣科技業現階段的生態還是偏硬,
    所以莫名其妙又走到韌體…

  64. 2009/8/7 於 15:25 | #64

    等我退伍之後會找份寫程式的工作,產品不胡搞瞎搞,工時合理,薪水足夠養家活口,就可以了。再老一點的時候,會弄個個人工作室,開發一些自己有興趣的軟體。再老一點的時候,應該會去擺小吃攤,賣好吃的,吃好吃的。再老一點的時候,打算讓小孩養,自己則是做點公益活動。以上是目前我所做的工作規畫。

  65. andy0518
    2009/10/3 於 13:41 | #65

    你好:
    我最近再找可以貼code的nopaste,但是都找不到我想要的style, 想請問你網頁上的code, 是用別人提供的nopaste還是自己寫的, 我覺得看起來滿好看的, 謝謝

  66. 2009/10/3 於 16:36 | #66

    我是拿這原始碼來改的:http://alexgorbatchev.com/wiki/SyntaxHighlighter

  67. pokia
    2009/10/20 於 11:36 | #67

    您好:

    在Bitmask in Dynamic Programming主題中提到的TSP作法
    某一行code為if (!dp[ss][i] || dp[s][i] + adj[i][j] < dp[ss][j])
    其中!dp[ss][i] 是不是該改為 !dp[ss][j]
    指的是還沒紀錄到j的最短路徑

    我想應是如此 我已經測過uva的題目了

  68. 2009/10/21 於 7:44 | #68

    你說的沒錯!我修正它了,謝謝你。:)

  69. Bleed
    2009/10/23 於 10:35 | #69

    您好
    最近寫到UVa 10181 – 15 puzzle problem,並參考了您的網頁
    http://www.csie.ntnu.edu.tw/~u91029/8PuzzleProblem.html
    發現在判斷solvable的情況有點問題
    http://mathworld.wolfram.com/15Puzzle.html
    這裡算inversion時應該已經假設空白是在右下角
    所以偶數為solvable
    而初始盤面的空白不一定在右下角
    如果自行移動到右下角在測試沒有問題
    但如果要直接套用該函數,必須在最後結果加上空白的ow number
    然後其sum為奇數為solvable,偶數為不可解
    這個編程理論在以下的網頁
    http://bal4u.dip.jp/mt/program/2006/05/uva-10181-15puzzle-problem-2.html
    可以看到前面還是一樣算inversion,後面有加上r0,最後才判定
    r0的意思就是0這個數字的row number

    附帶一提,如果直接套用該函數而不加上空白的row number判定
    UVa 10181的範例測資第一個就會是無解了

  70. 2009/10/23 於 19:54 | #70

    感謝你詳細的說明!是我搞錯了,現在已經修正囉。 :)

  1. No trackbacks yet.