PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/ 。

何岳峰 敬上

2007年3月8日 星期四

缺失報告及缺失編號的關係

課堂上,提到了一個工程案承辦人員時常面對的困擾:

當工程案被查核、督導後,就會有查核、督導委員的意見,這些意見有的簡短、有的複雜,所以承辮人員把這些意見分門別類到工程會制定的缺失編號時,往往傷透了腦筋,如何正確地、快速地為這些意見作分類就是一個值得探討的問題。

初步想法是:
反轉一般搜尋的觀念,我用報告內容來找關鍵字。也就是說已經擁有一堆關鍵詞的集合,用這個關鍵詞集合來搜尋報告內容,然後依關連性高至低排列,讓使用者點選這篇文章應分類到那個集合。

系統並由此得到一次回饋,強化某報告與某集合的關連性。

須作到的工作有:
  1. 報告的中文斷詞
  2. 分析某分類的關鍵詞集合為何
  3. 關連的基本資料庫

自然數中的特定自然數集合?

大家似乎對數學問題的程式求解非常有興趣。我這邊再提供一個數學問題,這本來是我的碩士論文要作的題目(其中的一個部份)。

1條18公分長的竹筷,如果要分成10、7、2、3公分的話,且剩餘的長度不可大於等於2公分,這樣有那幾種分法?

程式要能寫到任意長度的竹筷可被任意個數的自然數切割。

我的程式目前只有 Perl 版的,過幾天改成 Python 版的,再 po 。

2007年3月5日 星期一

Python: pydoc ?!?

pydoc? 這是什麼東西~~怎麼學 Python 半年了,今天才在 Trac-Hacks 看到有這個東西。

天呀!!用 Perl 時,我們是離不開 perldoc ,不管是無聊,還是忘了函式用法,看 perldoc 總是第一件事。但我在學 Python 時,查類別方法時,都是用 dir() ,要不就上網查答案,從來沒想過 Python 也有類似 perldoc 的工具。

天呀!!我看的 Python 書,怎麼沒人提這點呢??真令我感到不解,一定是我跳著看,就這麼地跳過去了。

而且 pydoc 還有一個貼心的設計,只要你打下列這個指令

# pydoc -p iii

iii表1個大於1024,小於65535的正整數。你就可以用瀏覽器在 http://127.0.0.1:iii/ 觀看整個 pydoc 的內容。

真棒~~

Google Desktop

發現什麼不一樣了嗎?

Google單字下的「桌面」代表的是這個頁面不是從 www.google.com 來的,而是灌了 Google Desktop 程式。這個頁面的來源其實是 http://127.0.0.1:4664/ ,完完全全的一個安裝在本地端的網頁應用程式。

這個應用程式的功能,主要是讓你尋找本機上的檔案,不只是找找檔名而已,檔案中的內容以及你在 Gmail 上的信件也可以搜索,而且重點是,
它用起來的速度就像你找網頁一樣快。

Google 真棒!!

2007年3月3日 星期六

3X5 = 2X8 ??



上圖合理嗎?

答案請用滑鼠選取下面的空白處:

當然是不合理的。因為綠三角的斜率為 2/5 ,紅三角為 3/8 ,兩個合在一起怎麼會是1個直角三角形呢。

答案請用滑鼠選取上面的空白處。

微軟徵才試題

永源拿了兩個不同數字...
這兩個數字分別大於 1 ,也分別小於 50

永源只把這兩個數字的乘積告訴了亞譚 ...
永源再只把這兩個數字的和告訴了明歆 ...
永源問, 這兩個數字是什麼 ?

以下是亞譚和明歆的對話... (小強, 小毛, 小燕在旁坐陪)
亞譚: 我不知道這兩個數字是什麼!
明歆: 但我也還是不知道這兩個數字是什麼!
亞譚: 喔!那我知道那兩個數字是什麼了 !
明歆: 喔!那我也知道那兩個數字是什麼了 !
突然間 ....聰明的三位陪客同時也說: 我們也知道那兩個數字是什麼了 !
聰明的你, 告訴我....那兩個數字是什麼 ?

原文應是英文,翻成中文後,求解卻有多組,所以上文已有作過部份修改。

之前聽到這個題目時,是用質數的概念來解的,這方法不對。今天聽了老師的講法,才知道應是用集合的方式。

求解的邏輯如下:

找出兩個數字「積」的集合,把只出現1次的全部刪除,針對剩下數字對,把「和」的集合中,只出現1次的刪除。

這樣留下來的數字對只剩下638對。然後我們針對638對所產生的「積」,去找出對應數字對的「和」出現有幾次。如:
1344的積有兩個數字對(28,48)及(32,42),所以「和」為76及74,再去對應638對中的「和」是76的有幾次,74的有幾次。最後我們得到1344的「和」次數集合為(2,3)。

這一定不是我們要的答案,因為亞潭知道但明韶不知道的原因,在於只能有一個次數大於2的「和」次數集合,而上述的1344共有2個大於2的集合。

所以我們所要找尋的「和」次數集合應為(2,1,1,1,1)、(3,1,1,1)或是(6,1)之類的。

程式邏輯如下:

利用 dictionary(hash) 的特性,把「積」集合放在 times 變數,key為積值,value為對應的數字對陣列;「和」集合放在 plus 變數,key為和值,value為對應的數字對陣列。

刪完了只出現1次的數字對後,把剩下的「積」集合放到 s_times 變數;「和」集合放到 s_plus 變數中。

最後一個迴圈,則是把剩下的「積」集合中,所對應數字對的「和」次數集合(放到 a 陣列)找出來,並找出其次數只有1個大於2的 a 陣列,而 a陣列中惟一大於2的「和」其數字對即是解答。

Python 程式碼:

#!/usr/bin/python

(times, plus) = ({}, {})
for i in xrange(2, 50):
----for j in xrange(i + 1, 50):
--------if(times.has_key(i * j)):
------------times[i*j].append((i, j))
--------else:
------------times[i*j] = [(i, j)]
--------if(plus.has_key(i + j)):
------------plus[i+j].append((i, j))
--------else:
------------plus[i+j] = [(i, j)]
--------
(s_times, s_plus) = ({}, {})
for (t_k, t_v) in times.items():
----if(len(t_v) >= 2):
--------for (i, j) in t_v:
------------if(len(plus[i+j]) >= 2):
----------------if(s_times.has_key(i * j)):
--------------------s_times[i*j].append((i, j))
----------------else:
--------------------s_times[i*j] = [(i, j)]
----------------if(s_plus.has_key(i + j)):
--------------------s_plus[i+j].append((i, j))
----------------else:
--------------------s_plus[i+j] = [(i, j)]

for (t_k , t_v) in s_times.items():
----(a, b) = ([], 0)
----for (t_i, t_j) in t_v:
--------a.append(len(s_plus[t_i+t_j]))
----for a_i in a:
--------if(a_i >= 2): b += 1
----if(b == 1): print str(t_i) + ', ' + str(t_j)

後記:

老師講解這題的時候,是用 Matlab 程式求解的。我在課堂上,嘗試用 Python 求解,怎麼想都想不出來,直到回家路上,才發現看了 Matlab 程式後,一直把矩陣觀念放在腦中,而基本的 hash 原理全忘了。我還是得一次只作一件事吧!

2007年3月2日 星期五

Python: 持續讚嘆中

我幾天都在 Python 的領域中翻滾,看了許多 Trac 及 Django 的文件,覺得 Python 開發模式實在是太棒了。這對過去常用 PHP 的人來說,是一種新鮮的經驗。

感到最大的不同點是:
  1. 自己帶 web server裝
    • Trac 或 Django 的程式時,它們會自己帶一個 http deamon(lighthttpd) ,所以程式裝完,不太需要設定,就可以跑了。
  2. 程式是裝在系統中,而不是 www 資料夾
    • 並不像 PHP 的專案,要把所有的程式放在某個地方,然後設定 apache 的 DocumentRoot 。這些 Python 程式就像是一個元件或函式庫是放在系統用的資料夾中,也就是當你要寫別的專案時,直接在程式碼中 import 進來。而不是 require('特定位址的 php 程式')
因為第2點的特性,所以軟體工程師在開發 web 專案時,必需將程式以 class 的方式存在,所以專案的可用性也就提高了。

Python 真是好東西呀!
Related Posts Plugin for WordPress, Blogger...