pylons建站日記4 邊界檢測類

2021-08-29 11:36:52 字數 2762 閱讀 9030

期末迎考,忙碌中:)學習進度放緩

今天這篇文章和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 第一優...