В библиотеке распознаватель XPath, BS4 и pyquery

  Принцип Hash и осуществление глобальной

  1-хэш хэш Введение

  2-Universal хэширования глобальное хэширования

  3- построить глобальную хэш-H \ mathcal {H} Н

  4-Python достичь

  1-хэш хэш Введение

  хэш-функция у = Н (к) у = Н (К) у = Н (К), ввод произвольной длины KKK через хэш-алгоритма HHH YYY в выходной фиксированной длины, выходное значение хэш-1. Общая хеш-функция у = Н (к) = (a⋅k + Ь) мод мой = H (K) = (A \ CDOT К + В) \ моде моего = Н (к) = (a⋅k + б) МПМ, MMM как правило, простое число.

  хэш-функция домена обеспечивается из KKK, диапазон YYY, в общем, | K |> | Y | | K |> | Y | | K |> | Y |, поэтому склонны к коллизии хэш-функции, как показано ниже, ч (K5) = Н (К2) = H (K7) ч (k_5) = Н (K_2) = Н (k_7) ч (K5) = Н (К2) = H (K7), k5, к2, k7k_5, K_2 , k_7k5, k2, k7 на цепи (столкновения):

  Для хэш-функции, в основном в состоянии найти набор входных данных, так что их хэш-значения совпадают, что приводит их в цепи, а иногда даже выглядит, чем линейная сложность еще выше, потому что больше времени хэш поиска, чем линейный ,

  2-Universal хэширования глобальное хэширования

  Идея: Один из способов решения этой проблемы является случайной. Случайный выбор из множества хэш-функций (семейство хеш-функций). Так что выбирайте, нет другого пути, чтобы построить множество входов для конкретной хэш-функции, что хэш-функцией является очень низкой эффективностью.

  Определено 1: U \ mathcal {U} U определен домены, Н \ mathcal {H} Н множество хэш-функций, может быть U \ mathcal {U} U сопоставляются {0,1, ..., M-1 } \ {0, 1, ..., т-1 \} {0,1, ..., M-1}, т.е. ч: U → {0,1, ..., M-1}, ч ∈Hh: \ mathcal {U} \ RightArrow \ {0, 1, ..., т-1 \}, ч \ в \ mathcal {H} H: U → {0,1, ..., M-1 }, h∈H.

  Определение 2: Если ∀x, у \ FORALL х, y∀x, у удовлетворяют х ≠ ух \ NEQ yx = у и | {h∈H: Н (х) = Н (у)} | = | Н | м | \ {ч \ в \ mathcal {H}: Н (х) = Н (у) \} | = \ гидроразрыва {| \ mathcal {H} |} {т} | {h∈H: Н (х) = ч (у)} | = т | H |, называется H \ mathcal {H} H является глобальным (Universal) есть.

  2 По определению, если ч равномерно случайным образом из H mathcal {H} H Выберите \ (Обратите внимание, что каждый вход для повторного выбора хеш-функции), то вероятность столкновения ххх и ууу являются:

  Количество функции Н (х) = Н (у) является функцией всех = | Н | м | H |. = 1м \ {Количество функция Н (х) = Н (у) является функцией всех} гидроразрыва {}

  = \ Гидроразрыва {\ гидроразрыва {| \ mathcal {H} |} {т}} {| \ mathcal {H} |}. = \ Гидроразрыва {1} {т} все функции Н (х) = Н (у) номер функции = | H | м | H | = m1.

  Теорема 1: равномерно случайным образом из Н \ mathcal {H} H (H \ mathcal {H} H является вся область) выбрана HHH, если мы теперь поместить NNN вход в хэш-таблицу в ТТТ, а затем дать введите ххх, там

  Е [х, а количество Т-элементов в хэш-таблице столкновений]

  Где Е [⋅] E [\ CDOT] E [⋅] обозначает математическое ожидание.

  [Значение теоремы 1], доказав выше теоремы, мы можем сказать, что, если H \ mathcal {H} Н, окончательное распределение элементов во всей области в хэш-таблице TTT (в среднем смысле) является однородным.

  Доказательство теоремы 1 Пусть CxC_ {х} Cx представляет собой число случайных элементов в хэш-таблице и ххх столкновения ТТТ, при условии,

  Cxy = {1, если (х) = Н (у) 0, если А (х) ≠ ч (у) C_ {ху} = \ влево \ {\ {начинаются массив} {} кр

  1 &, если \ (х) = Н (у) \\

  0 &, если \ ч (х) \ NEQ ч (у)

  \ {Конец массива} \ right.Cxy = {10При (х) = Н (у), если (х) =  ч (у)

  Ну,

  Е [Сх] = E [Σy∈T-xCxy] = Σy∈T-Xe [Cxy] Так как желаемые свойства линейности = Σy∈T-X1M = (п-1) 1м

  Е [C_x] & = Е [\ sum_ {у \ в Tx} C_ {х}] \\

  & = \ Sum_ {у \ в Tx} Е [C_ {х}] & потому желательные линейных свойства \\

  & = \ Sum_ {у \ в Tx} \ гидроразрыва {1} {M} \\

  & = (П-1) \ гидроразрыва {1} {т} \\

  & <\ Гидроразрыва {п} {т}.

  \ {Конец массива} Е [Сх] = E [Σy∈T-xCxy] = Σy∈T-Xe [Cxy] = Σy∈T-XM1 = (п-1) m1

  Пример: Если п = 1, т = 2n = 1, т = 2n = 1, т = 2, то Е [Сх] <12.E [C_x] <\ гидроразрыва {1} {2} .E [Сх] < 21.

  3- построить глобальную хэш-H \ mathcal {H} Н

  Теорема 2: в соответствии со следующим четыре шага конфигурации Н \ mathcal {H} Н все поля:

  (Условие) Заказ ммм равен простое число;

  (Начальная подготовка) вход KKK написал г + 1r + 1r + 1 цифры: K = K = K =, где ki∈ {0,1, ..., M-1} K_i \ в \ {0, 1, ..., т-1 \} ki∈ {0,1, ..., M-1} (эквивалентно гексадецималах по KKK ттт);

  (Случайный) случайного выбора а = а = а =, в котором ai∈0,1, ..., м-1a_i \ в {0, 1, ..., M-1} ai∈0,1, .. ., м-1;

  (Хэш 函数) га (к) = (сг = 0i = раи × ки) мод mh_a (к) = (\ sum_ {I = 0} ^ {я = г} a_i \ раз K_i) \ мод MHA (к) = (сг = 0i = раи × кий) МАЯ.

  См 2 доказательства.

  4-Python достичь

  Для того, чтобы написать свой собственный код, поправьте меня, если неправильно взгляд. Код ссылки: https: //github.com/VFVrPQ/LDP/blob/master/Components/UniversalHashing.py, в противном случае полный код выглядит следующим образом:

  импорт математика

  импорт случайных

  Класс универсальное хеширование:

  «»»

  г: простой

  д: домен, [0, 1, ..., d-1]

  Len: Максимальное количество цифр в г Base

  V: входное значение в [0, 1, ..., d-1]

  хэш-функция: H_A (а) = (а (0) * к (0) + а (1) * к (1) + ... + а (а-1) * к (только-1))% г

  «»»

  Защиту __init __ (я, г, д):

  самостоятельно .__ г = г

  утверждают, г> = 2, «г меньше, чем 2»

  утверждают само .__ IsPrime (г), «г не является простым»

  самостоятельно .__ д = д

  Собственной .__ Len = Math.ceil (Math.log (г) / Math.log (г)) # г-диапазона, максимальное число битов

  самостоятельно .__ а = само .__ Len * [0] # начальная длина

  # V представляет собой входное значение в [0, 1, ..., d-1]

  Защита хэш (я, v):

  само .__ хаотичность () # регенерировать, выберите H

  из = self.calc (само .__ а, v)

  Самовозврат .__ а, из

  Вычислено H_A # (к) = (а (0) * к (0) + а (1) * к (1) + ... + а (а-1) * к (только-1))% г

  Защита известково (Я, а, v):

  утверждают только (а) == само .__ только «только (А)! = само .__ только '

  к = само .__ toBitList (v)

  из = 0 Сколько денег Чжэнчжоу выкидыши http://mobile.sgyy029.com/

  для я в диапазоне (само .__ LEN):

  OUT = (выход + в [I] * к [I])% собственного .__ г

  вернуться из

  Защиту __randomness (самостоятельно):

  # Генерировать

  для я в диапазоне (само .__ LEN):

  самостоятельно .__ а [I] = random.randint (0, само .__ г-1)

  Защиту __toBitList (Я, v):

  v утверждают> = 0, 'v <0'

  если v == 0:

  Самовозврат .__ Len * [0]

  Bitliste = само .__ человек * [0]

  для я в диапазоне (само .__ LEN):

  bitList [I] = v% собственной .__ г

  v = INT (об / с собственной .__ г)

  возвращение Bitliste

  Защиту __isPrime (Я, v):

  Если V <= 1:

  возвращение Ложные

  для я в диапазоне (2, Int (Math.sqrt (V)) + 1, 1):

  если v% я == 0:

  возвращение Ложные

  возвращающие

  # для теста

  если __name__ == "__main__":

  РАЗ = 10

  г = 29 # простое

  d = 16 # домена

  uhash = универсальное хеширование (г, д)

  Н = г * [0]

  для г в диапазоне (TIMES): # случайные моменты времени для проверки

  х = random.randint (0, д-1)

  _, Из = uhash.hash (х)

  Н [выход] + = 1

  для г в интервале (г):

  печать (I, H [I])


рекомендация

отblog.51cto.com/14503791/2484280
рекомендация