Możesz preferować rodziny lokalizacji oparte na odległości Hamminga , ze względu na ich bogactwo, elastyczność i podatność na obliczenia.
Notacja i definicje
Przypomnijmy, że w wolnej modułu skończonej trójwymiarowy Bazując The odległość Hamminga pomiędzy dwoma wektorami i jest liczba miejsc gdzie .V(e1,e2,…,eJ) δHv=v1e1+⋯+vJeJw=w1e1+⋯+wJeJivi≠wi
Biorąc pod uwagę dowolne pochodzenie , odległość Hamminga dzieli na sfery , , gdzie . Kiedy pierścień uziemiający ma elementów, ma elementów, a ma . (Wynika to natychmiast z obserwacji, że elementy różnią się od w dokładnie miejscach - w których jestv0∈VVSi(v0)i=0,1,…,JSi(v0)={w∈V | δH(w,v0)=i}nVnJSi(v)(Ji)(n−1)iSi(v)vi(Ji)możliwości - i że istnieje niezależnie wybór wartości dla każdego miejsca).n−1
Tłumaczenie afiniczne w działa naturalnie na jego dystrybucje, dając rodziny lokalizacji. W szczególności, gdy jest dowolnym rozkładem na (co oznacza niewiele więcej niż , dla wszystkich , i ) i jest dowolnym elementem , to jest również rozkładem gdzieVfVf:V→[0,1]f(v)≥0v∈V∑v∈Vf(v)=1wVf(w)
f(w)(v)=f(v−w)
wszystkie . Rodzinę Położenie rozkładów niezmienna przy tym działania: oznacza dla wszystkich .v∈V Ωf∈Ωf(v)∈Ωv∈V
Budowa
To pozwala nam zdefiniować potencjalnie interesujące i przydatne rodziny rozkładów, określając ich kształty w jednym stałym wektorze , co dla wygody wezmę za i tłumaczenie tych „rozkładów generowania” pod działaniem celu uzyskania pełnej rodziny . Aby osiągnąć pożądaną właściwość, która powinna mieć porównywalne wartości w pobliskich punktach, po prostu wymagaj tej właściwości wszystkich rozkładów generowania.v0=(0,0,…,0)VΩf
Aby zobaczyć, jak to działa, stwórzmy rodzinę lokalizacji wszystkich rozkładów, które zmniejszają się wraz ze wzrostem odległości. Ponieważ możliwe są tylko odległości Hamminga , rozważ każdą malejącą sekwencję nieujemnych liczb rzeczywistych = . ZestawJ+1a0≠a0≥a1≥⋯≥aJ≥0
A=∑i=0J(n−1)i(Ji)ai
i zdefiniuj funkcję przezfa:V→[0,1]
fa(v)=aδH(0,v)A.
Potem, jak to łatwe do sprawdzenia, jest dystrybucja na . Ponadto wtedy i tylko wtedy, gdy jest dodatnią wielokrotnością (jako wektory w ). Zatem, jeśli chcemy, możemy standaryzować do .faVfa=fa′a′aRJ+1aa0=1
Odpowiednio, ta konstrukcja daje wyraźną parametryzację wszystkich takich niezmiennych lokalizacji, które maleją wraz z odległością Hamminga: każdy taki rozkład ma postać dla pewnej sekwencji niektóre wektor .f(v)aa=1≥a1≥a2≥⋯≥aJ≥0v∈V
Ta parametryzacja może pozwolić na wygodną specyfikację priorów: uwzględnij je w przedziale w lokalizacji i przed w kształcie . (Oczywiście można rozważyć większy zestaw priorytetów, w których lokalizacja i kształt nie są niezależne, ale byłoby to bardziej skomplikowane przedsięwzięcie).va
Generowanie losowych wartości
Jednym ze sposobów na pobranie próbki z jest etapowanie poprzez podzielenie jej na rozkład w promieniu kulistym i inny rozkład zależny od każdej kuli:f(v)a
Narysuj indeks z rozkładu dyskretnego na podany przez prawdopodobieństwa , gdzie jest zdefiniowane jak poprzednio .i{0,1,…,J}(Ji)(n−1)iai/AA
Indeks odpowiada zestawowi wektorów różniących się od w dokładnie miejscach. Dlatego wybierz te miejsca spośród możliwych podzbiorów , dając każdemu jednakowemu prawdopodobieństwu. (To jest tylko przykładowy indeksy z bez zastąpienia). Niech to podzbiór miejscach być napisany .ivii(Ji)iJ iI
Narysuj element , niezależnie wybierając wartość równomiernie ze zbioru skalarów od dla wszystkich a w przeciwnym razie ustaw . utwórz wektor , wybierając losowo z niezerowych skalarów, gdy a w przeciwnym razie ustawiając . Ustaw .wwjvjj∈Iwj=vjuujj∈Iuj=0w=v+u
Krok 3 jest niepotrzebny w przypadku binarnym.
Przykład
Oto R
implementacja do zilustrowania.
rHamming <- function(N=1, a=c(1,1,1), n=2, origin) {
# Draw N random values from the distribution f_a^v where the ground ring
# is {0,1,...,n-1} mod n and the vector space has dimension j = length(a)-1.
j <- length(a) - 1
if(missing(origin)) origin <- rep(0, j)
# Draw radii `i` from the marginal distribution of the spherical radii.
f <- sapply(0:j, function(i) (n-1)^i * choose(j,i) * a[i+1])
i <- sample(0:j, N, replace=TRUE, prob=f)
# Helper function: select nonzero elements of 1:(n-1) in exactly i places.
h <- function(i) {
x <- c(sample(1:(n-1), i, replace=TRUE), rep(0, j-i))
sample(x, j, replace=FALSE)
}
# Draw elements from the conditional distribution over the spheres
# and translate them by the origin.
(sapply(i, h) + origin) %% n
}
Jako przykład jego zastosowania:
test <- rHamming(10^4, 2^(11:1), origin=rep(1,10))
hist(apply(test, 2, function(x) sum(x != 0)))
Miało to sekundy zwrócić lid elementy Distribution , gdzie , (w przypadku binarnej), i maleje wykładniczo.0.2104f(v)aJ=10n=2v=(1,1,…,1)a=(211,210,…,21)
(Ten algorytm nie wymaga zmniejszania ; w ten sposób będzie generować losowe zmienne z dowolnej rodziny lokalizacji, nie tylko z tych jednomodalnych.)a