TopCoder Inv 2001 R1 - SquareDigits
資訊 路徑:Tournament \ 1-16 \ 1 - Inv 2001 R1 \ SquareDigits 分數:500 題目程式介面1234Class Name: SquareDigitsMethod Name: smallestResultParameters: intReturns: int 說明輸入一數字 n,找到 T(x) 包含 n 的最小 x。 定義S(x):表示 x 的數字逐字幕次和,例如 S(3) = 3 * 3 = 9 和 S(230) = 2 * 2 + 3 * 3 + 0 * 0 = 13。T(x):表示重複執行 S(x) 直到出現重複結果,例如 T(37),S(37) = 58S(58) = 89S(89) = 145S(145) = 42S(42) = 20S(20) = 4S(4) = 16S(16) = 37S(37) <- 重複T(37) = { 58, 89, 145, 42, 20, 4, 16, 37 } ...
TopCoder - 線上程式設計競賽
簡介TopCoder 是一個提供線上程式競賽的網站,類似 ACM 的競賽,提供演算法題目的比賽和練習之外,還有其他的軟體設計的項目,如果獲得前幾名的話還可以拿到獎金。 可以到官網點擊右上 [SIGN UP] 註冊,之後可以在這邊參加各種類型的競賽。 其中的演算法類型提供了線上編寫程式送出的功能,可以從畫面左上角的 O(n) 的圖示進入,其他圖示表示不同類型的競賽 點擊 O(n) 之後,他會開啟 Java 程式,登入後可以選擇進入練功房寫以前競賽的題目來練習,或者是參加目前進行中的競賽。 進入練功房之後,可以開啟題目來練習,一個競賽有三道題目,依據難度分別是 250、500 和 1000 分的題目。 開啟之後會進入撰寫程式畫面,TopCoder 目前支援 Java、C++、C# 和 VB 四種語言。程式寫到一半要離開的話,可以使用 Save,若寫完則可以 Compile,若要自己輸入資料測試則使用 Test,確認一切正確之後則可以 Submit 出去,題目越快完成交出去分數會越高,從題目被開啟後就開始計時,另外重新 Submit 的話還會額外的扣分,無論如何,完成至少可得到 30% 的分 ...
演算法 - 合併排序法 (Merge Sort)
簡介合併排序法 (或稱歸併排序法),是排序演算法的一種,使用 Divide and Conquer 的演算法來實作。排序時需要額外的空間來處理,過程依照以下步驟進行: 將陣列分割直到只有一個元素。 開始兩兩合併,每次合併同時進行排序,合併出排序過的陣列。 重複2的動作直到全部合併完成。 流程範例如圖所示: 實作又可分為 Top-down 和 Bottom-up,依據原始的步驟會先將陣量分割直到剩一個元素 (Top-down),然而也可以一開始就直接切割成單一元素開始合併 (Bottom-up)。 分析 最佳時間複雜度:O(nlog n) 平均時間複雜度:O(nlog n) 最差時間複雜度:O(nlog n) 空間複雜度:O(n) Stable sort:是 虛擬碼以下以較高階的想法寫出虛擬碼,實作上效能要好必須還要進一步修改: Top-down12345678910111213141516171819202122function sort(list) if list.length == 1 return list end if left = 取出從 list[0] 到 list ...
演算法 - 河內塔 (Tower of Hanoi)
簡介也翻譯作漢諾塔,這是根據一個傳說演變而成的題目,題目的規則如下: 有三根竿子,例如編號為 A、B 和 C,竿子上面可串中空圓盤。 於 A 竿子放入 N 個盤子開始,盤子由下至上變小。 一次只能移動一個盤子。 大盤子不能再小盤子上面。 目標將全部盤子移動到 C 竿子。 現在我們嘗試上面的問題撰寫成程式解決,依據上面的說明,寫出程式印出移動的步驟。 演算法此題目一般可使用 Divide and Conquer 來解,當有 N 個盤子的時候很難思考,我們假設只有兩個盤子的時候,就很好思考,只需要: 將上面的盤子移到暫時擺放的竿子。 將下面的盤子移到目標竿子。 將原來上面的盤子移到目標竿子。 而當盤子 N 個的時候,其實也是依照同樣的邏輯進行即可,但上面 N - 1 個盤子要如何移到暫時擺放的竿子,這時候我們用遞迴的方式交給下一次呼叫自己去處理。 虛擬碼123456789function move(disks, from, to) if disks == 1 自訂的移動動作 else move(disks - 1, from, 另一竿子) move(1, from, ...
演算法 - 分治法 (Divide and conquer)
簡介Divide and conquer 中文翻作分治法,概念如字面上的意義,將問題先切分成小問題後再解決,再將結果合併求出原始問題的答案。 優點Divide and conquer 有許多優點,舉出常見的幾點如下: 將困難的問題簡化為容易實作的方式,例如河內塔 (Tower of Hanoii) 問題。 提升程式效率,例如合併排序 (Merge Sort) 讓排序速度提升。 能夠平行處理,例如 MapReduce 也是 Divide and conquer 的一種。 步驟以下摘錄自 Wiki 分解:將原問題分解為若干個規模較小,相對獨立,與原問題形式相同的子問題。 解決:若子問題規模較小且易於解決時,則直接解。否則,遞歸地解決各子問題。 合併:將各子問題的解合併為原問題的解。 不適合的情況Divide and conquer 是利用遞迴的方式來實作,所以當不適合使用遞迴的時候也就不適合使用 Divide and conquer,例如費波那西數列 (fibonacci): 雖然費波那西數列使用 Divide and conquer 來思考很容易實作,但可以從圖中看到,單純使用遞 ...
解決 The script tried to execute a method or access a property of an incomplete object
問題程式執行出現以下錯誤 1Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "MyClass" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in xxx.php on line 4 原因這是因為程式某些操作產生 Incomplete Object(__PHP_Incomplete_Class),並且呼叫了此物件的函式。產生 I ...
TopCoder Inv 2001 R1 - HowEasy
資訊 路徑:Tournament \ 1-16 \ 1 - Inv 2001 R1 \ HowEasy 分數:250 題目程式介面1234Class Name: HowEasyMethod Name: pointValParameters: StringReturns: int 說明TopCoder 的題目依難度有三種分數,現在想要撰寫一個程式,能夠依據題目的描述的平均字長 (Average Word Length) 來決定分數: 平均字長小於等於 3 為 250 分。 平均字長 4 或 5 為 500 分。 平均字長大於等於 6 為 1000 分。 定義 Token:句子中的字元集以空白切開為。 Word:Token 由 [a-zA-Z] 組成,可能會有點結尾 (.),且至少一個字元。 Word Length:一個 Word 的字元數。 Average Word Length:所有 Word 的 Word Length 總和除以 Word 數,其中點不算字數,當 Word 數為 0 時 Average Word Length 為 0。 系統保證輸入 1 - 50個字元,包含 ...
MySQL 修改密碼與忘記密碼重設
本篇文章說明 MySQL 如何修改密碼與忘記密碼時如何重設密碼。 設定 root 密碼一開始安裝好 mysql 時,root 可能尚未設定密碼,可以用以下指令設定 1mysqladmin -u root password '你的密碼' 或者 1mysqladmin -u root password 再輸入密碼 修改使用者密碼方法一使用有權限或要修改的使用者本身登入 mysql 1mysql -u 登入使用者 -p 輸入密碼後進入 mysql 控制台,輸入 12mysql> SET PASSWORD FOR '目標使用者'@'主機' = PASSWORD('密碼');mysql> flush privileges; 例如 1mysql> SET PASSWORD FOR 'emn178'@'localhost' = PASSWORD('password'); 方法二使用有權限的使用者登入 mysql 1mysql -u 登 ...
OpenSearch 格式說明
簡介OpenSearch 是一種以 XML 方式定義搜索的方法,網站依據此規範實作可與其他程式介接等用途。 完整的規範可以在此網站查到,本文以表格的方式整理說明。 命名空間OpenSearch 1.1 版命名空間為 http://a9.com/-/spec/opensearch/1.1/,目前為 Draft MIME TypeMIME Type(Content Type 或稱為 Media Type) 為 application/opensearchdescription+xml 結構與定義<OpenSearchDescription><OpenSearchDescription> 為 OpenSearch 的 XML 起始根節點,<OpenSearchDescription> 之中定義了以下 Element Element 必要 多筆 資料型態 說明 <ShortName> O X 純文字 簡短標題,不可超過 16 個字元 <Description> O X 純文字 描述,不可超過 1024 個字元 ...
OPDS Catalog 1.1 格式說明
簡介Open Publication Distribution System 中文翻譯作開放出版發行系統,是一種基於 Atom 用來對電子出版物 (主要用於電子書) 作格式化的規範。透過 OPDS 可以提供電子出版物整合、發布、查詢和取得的功能。完整的規範可以在此網站查看。OPDS 繼承自 Atom。 命名空間OPDS 目前發展到版本 1.1,1.2 為 Draft;OPDS 1.1 的規範使用到的命名空間與 Prefix 如下: 名稱 命名空間 Prefix OPDS 1.1 http://opds-spec.org/2010/catalog opds: Atom 1.0 http://www.w3.org/2005/Atom atom: DCTERMS http://purl.org/dc/terms/ dc: MIME TypeMIME Type 雖然基於 Atom,不過由於 OPDS 的文件依據不同類型內容共定義了四種,如下: 文件類型 MIME Type OPDS Catalog Entry Document application ...






