期末迎考,忙碌中:)學習進度放緩
今天這篇文章和pylons沒有什麼關係,不過也算是建站的一部分.
前面說過,我是打算寫乙個抓新聞的**.
但是,每次抓取時如何區分哪些是更新了,哪些是已經抓取的網頁呢?
我的思路是判斷頁面位址.
但是每抓取乙個網頁就要去查詢一次資料庫,判斷是該**是否已存在否存在不免有點低效.
其實這應該並非效能瓶頸,只是c++的效率優先的慣性思維,寫完了才發現可能是過早最優化了:)
罪過,罪過...
不過既然已經寫了,那就用著吧.
演算法假定了這樣的乙個事實,更新的新聞的鏈結總是出現在已抓取新聞之前.
我們只需要尋找到最後一條更新過的新聞,然後就可以通過切片獲得更新的**的列表.
而邊界可以通過兩分法獲得,複雜度是o(log2(n)),比逐條查詢的o(n)快一點.
class bound(object):
class noneerror(lookuperror):
pass
"""用途:查詢有序對列 滿足 與 不滿足 函式的邊界.
>>> print bound(range (100),lambda x:x>12).false_true_index
(12, 13)
>>> print bound(range (10),lambda x:x>12).false_true_index
(0, none)
>>> print bound(range (100),lambda x:x>-1).false_true_index
(none, 0)
>>> print bound(range (100),lambda x:x<12).false_true_index
(12, 11)
"""def __init__(self,list,func):
self.__true_index=none
self.__false_index=none
length=len(list)
if length:
if func(list[-1]):
self.__true_index=length-1
else:
self.__false_index=length-1
if func(list[0]):
self.__true_index=0
else:
self.__false_index=0
if self.__false_index!=none and self.__true_index!=none:
if self.__true_index>self.__false_index:
get_diff=lambda:self.__true_index-self.__false_index
get_mid=lambda diff:diff/2+self.__false_index
else:
get_diff=lambda:self.__false_index-self.__true_index
get_mid=lambda diff:diff/2+self.__true_index
diff=get_diff()
while diff>1:
if func(list[mid]):
self.__true_index=mid
else:
self.__false_index=mid
diff=get_diff()
mid=get_mid(diff)
if self.__false_index!=none:
self.__false_index_value=list[self.__false_index]
if self.__true_index!=none:
self.__true_index_value=list[self.__true_index]
@property
def true_index(self):
return self.__true_index
@property
def false_index(self):
return self.__false_index
@property
def false_true_index(self):
return (self.false_index,self.true_index)
@property
def true_value(self):
if self.__true_index_value==none:
raise noneerror,'true bound not exist'
return self.__true_index_value
@property
def false_value(self):
if self.__false_index==none:
raise noneerror,'false bound not exist'
return self.__false_index_value
@property
def false_true_value(self):
return (self.false_value,self.true_value)
if "__main__"==__name__:
import doctest
doctest.testmod()
邊界檢測方法集合
在matlab的edge函式當中包含的method有7種 1 sobel運算元 這兩者對灰度漸變低雜訊的影象有較好的檢測效果,但是對於混合多複雜雜訊的影象,處理效果就不理想了。2 prewitt運算元 這兩者對灰度漸變低雜訊的影象有較好的檢測效果,但是對於混合多複雜雜訊的影象,處理效果就不理想了。3...
Laplace 運算元 邊界檢測
取second derivative得到 變化最大的地方,一階導數最大,二階導數為0,前者是sobel運算元所為,後者便是 laplace 運算元所為 因為影象是2d的,所以對兩個方向求二階導數 先濾波,將雜訊去掉 cvtcolor src,src gray,color bgr2gray 轉化成灰度...
二維瓦片網格邊界檢測
二維瓦片網格邊界檢測 1.每個網格只考慮enws四個相鄰格仔 四個相鄰格仔ensw編號為0 3 2.當前方向d 0 3 如果當前格仔是上乙個格仔選擇的ensw 0 3 中的乙個,則這個選擇就是當前方向 3.選擇下乙個的策略 按找以下優先順序判斷 d 3 4,d 4 4,d 5 4,d 6 4 第一優...