pylonsサイト日記4_境界検出クラス
期末試験、忙しい中
今日のこの文章はpylonsとは何の関係もありませんが、駅の一部です.
前に言ったように、私はニュースをつかむサイトを書くつもりです.
しかし、キャプチャするたびに、更新されたページとキャプチャされたページをどのように区別しますか?
私の考えはページのアドレスを判断することです.
しかし、1つのページをつかむたびにデータベースを検索し、そのサイトが存在するかどうかを判断するのは少し効果的ではありません.
実はこれは性能のボトルネックではないはずですが、C++の効率優先の慣性思考で、書き終わってから早すぎる最適化かもしれません:)
罪、罪...
でももう書いたからには、使ってください.
アルゴリズムは、更新されたニュースのリンクが常にニュースをキャプチャする前に現れるという事実を仮定する.
最後に更新されたニュースを探すだけで、スライスで更新されたウェブサイトのリストを得ることができます.
境界は二分法で得ることができ、複雑度はO(log 2(n))であり、1つのクエリのO(n)よりも少し速い.
今日のこの文章はpylonsとは何の関係もありませんが、駅の一部です.
前に言ったように、私はニュースをつかむサイトを書くつもりです.
しかし、キャプチャするたびに、更新されたページとキャプチャされたページをどのように区別しますか?
私の考えはページのアドレスを判断することです.
しかし、1つのページをつかむたびにデータベースを検索し、そのサイトが存在するかどうかを判断するのは少し効果的ではありません.
実はこれは性能のボトルネックではないはずですが、C++の効率優先の慣性思考で、書き終わってから早すぎる最適化かもしれません:)
罪、罪...
でももう書いたからには、使ってください.
アルゴリズムは、更新されたニュースのリンクが常にニュースをキャプチャする前に現れるという事実を仮定する.
最後に更新されたニュースを探すだけで、スライスで更新されたウェブサイトのリストを得ることができます.
境界は二分法で得ることができ、複雑度はO(log 2(n))であり、1つのクエリの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()