Nasıl bilinmeyen değerlerini elde etmek


19

Birisi bana aşağıdaki problemde yardımcı olabilir mi?

Bazı değerleri bulmak istiyorum (mod ) burada (örneğin ), verilen değerleri listesi karşılık gelen somut ilişkiyi bilmeden (örneğin ) farklılıklarına karşılık gelir. Değerler yana benzersiz verilen tanımlanmamış farklılıklar , biz aramaya herhangi değerlerin geçerli atama.ai,bjNi=1,2,,K,j=1,2,,KK=6K2aibj(modN)N=251ai,bj(modN)aibj(modN)

Kesinlikle, listedeki K2 sayılarının her permütasyonunu denemek (tamamen K2! Olası durumlar) ve daha sonra değişkenler olarak a_i, b_j ile modüler denklemleri çözmek ai,bjmümkün değildir.

Aslında, bu sorun, NTRU imza şemasının erken bir versiyonuna kriptanaliz üzerine bir makalede ortaya çıkmaktadır ( http://eprint.iacr.org/2001/005 ). Ancak, yazar sadece bir cümle yazdı “Basit bir geriye dönüş algoritması bir çözüm buluyor…” (Bölüm 3.3'te) ve böylece daha fazla açıklama yapabilir mi? Dahası, yazar ayrıca “her dairesel vardiya {((ai+M)modN,(bi+M)modN}i=1K veya bir takas ({(N1bi,N1ai)}i=1K) aynı aibjmodNpaterniyle sonuçlanır ve bu ifade yardımcı olur mu?


7
A_i, b_j'yi kurtarmanın imkansız olduğuna dikkat edin ai,bj, çünkü tüm sayılara sabit bir C eklerseniz C, farklar aynı kalır.
Yuval Filmus

1
@Yuval: Bu, açıklamanın son cümlesine zaten dahil edilmiştir. Bence sadece bir çözüme ihtiyaç var, çünkü birkaç tane var.
domotorp

2
@Yuval a_i ai,bj 'nin de modüler N alınması gerektiğini belirtmediğim için üzgünüm N. Yani sonsuz çözümler yoktur.
bir konuk

@domotorp Evet, çözümlerden herhangi birini bulmak sorun değil.
bir konuk

1
Belki OP olduğunu açıklamak olabilir ai , bj modülo alınır N belki başlığında veya birinci paragrafta: önceki sonrası. Sabit C ile ilgili sorundan Cda söz etmek gerekiyor. Okumaya başladığımda her iki şey beni şaşırttı.
Juan Bermejo Vega

Yanıtlar:


4

İşte bir öneri, ve . Bize listesi verilir . genellik kaybı olmadan bunlardan birini alarak başlayın . Genellik kaybı olmadan ve biz değerini elde . Şimdi başka bir tane alın ve bunun biçiminde (bu olasılığı ile olur ) ve .K=6N=251aibj(modN)a1b1b1=0a1a2b15/35=1/7a2

Bu aşamada olduğunu biliyoruz . Bir sonraki hedefimiz için . Her aday için , eğer o da listede olmalıdır. Eğer , olasılık olduğu listesi kabaca üzerinde de . Bazı aday bulurum Yani eğer kendisi için listesinde de yer alıyor, sonra muhtemelen . Bu şekilde, kesin olarak kurtarabiliriz .a1,a2,b1a1bjj1aibji=1(aibj)+(a2a1)=a2bji1(aibj)+(a2a1)33/251aibj(aibj)+(a2a1)i=1b2

Bu aşamada . Aynı şekilde kurtardığımız , de makul bir kesinlikte kurtarabiliriz . Sonra kurtarabilirsiniz aday bakarak kendisi için ve listesinde her ikisi de. Biz daha fazla olması nedeniyle s, bizim başarısızlık olasılığı belirgin iner. ediyoruz ve .a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)(aibj)+(a3a1)ab3,a4,b4,a5,b6,a6,b6

Bu algoritmanın herhangi bir noktasında, yanlış bir şey tahmin etmiş olabiliriz ve bu sonunda bir çelişki ile sonuçlanır (bir noktada, iyi bir aday ). Sonra geri dönüp başka bir olasılık deniyoruz; tüm olasılıkları tüketirsek, tekrar geri izleriz ve başka bir olasılık deneriz (algoritmanın farklı bir aşaması için); ve bunun gibi.aibj

Bu algoritmayı gerçekten programlamak iyi bir uygulamadır - muhtemelen geri izlemenin doğru bir şekilde nasıl uygulanacağını anlamanın tek yolu budur. Bu algoritmanın pratikte çalışıp çalışmadığını söylemenin tek yolu da budur.


Teşekkür ederim ve ben daha anlaşılması için bu geri izleme kodlayacağım. Belki de bu orijinal makalenin yazarı benzer bir yöntem kullandı çünkü "geri izlemeden" bahsetti.
bir konuk

Cevabımı yorumuma göndermeyi unuttuğun için üzgünüm! Ayrıca önerdiğiniz yöntemi de uyguladım (C ++ ile). Sonuç, algoritmanızın oldukça iyi çalıştığı ve çözümlerden birinin çok hızlı (bilgisayarımda bir saniyeden daha kısa sürede) bulunabileceği yönündedir. Ve bu sefer, backtrack prosedürlerini daha iyi anlayabiliyorum. Çok teşekkür ederim!
konuk

Son yorumumda neden "@Yuval" yapamıyorum ?! Üzgünüm, ama birkaç kez denedim.
konuk

Belki de kodu çevrimiçi olarak paylaşabilirsiniz, böylece makaleyi okuyan diğer kişiler buna erişebilir.
Yuval Filmus

5

Güncelleme : Aşağıdaki açıklama farklı bir soruna yöneliktir (iki farklı küme arasındaki çift mesafeler yerine bir kümede tüm çift mesafelere sahip olduğunuz). Ben yakından ilişkili olduğu için yine de bırakacağım.

Bu problem çevre yolu sorunu olarak adlandırılır ve genel -torus gömme probleminin özel bir durumudur . Aynı zamanda mesafeler arasındaki farkların mutlak olduğu turnike problemi ile de yakından ilgilidir (modulo bir sayı değil).d

Çevre yolu sorununun bir çoklu zaman algoritmasını kabul edip etmediği bilinmemektedir. İlgili sorular için çeşitli sözde poli-zaman algoritmaları vardır. En iyi referans (ne yazık ki eski bir referans) Lemke, Skiena ve Smith'in makalesidir .


1
Bu sorunun farklı olduğunu düşünüyorum. Çevre yolu probleminde tüm çift mesafeleri biliyoruz, burada sadece farklı gruplardaki iki nokta arasında biliyoruz. Bu daha az bilgi gibi görünse de, aslında sorunun çözülmesine yardımcı olabilir.
domotorp

Ah evet. iki taraflı bir grafik. iyi bir nokta.
Suresh Venkat

İki taraflı grafik? Gibi bir şey. Belki de sorunu bu şekilde denemeliyim, ama şimdi somut bir düşünce trenim yok.
bir konuk

3

Sanırım size sorunu çözecek kadar yeterli bir yer veren bir gözlem.

Dört farklılıklar var varsayalım , , , iki arası ortalama farklılıkları gibi ortaya 'nın ve iki ' s. Buna farklılıkların dörtlüsü deyin . Önemsiz bir ilişkimiz olduğuna dikkat edin:a1b1a1b2a2b1a2b2ab

(a1b1)(a1b2)=(a2b1)(a2b2)(modN).

Bu ilişkiyi, listesinden potansiyel dörtlülerin tanımlanması için kullanmaya çalışabilirsiniz . Örneğin, listeden dört fark seçin; yukarıdaki ilişkiyi tatmin etmezlerse, kesinlikle dörtlü bir yapıdan kaynaklanmazlar; eğer ilişkiyi tatmin ederlerse, bir dörtlüden doğabilirler.K2

Buradan bir şeyler almanın birçok yolu var, ama bunun yeterli olacağından şüpheleniyorum.

Özellikle, örnek parametre ayarlarınız için sorunun oldukça kolay olacağından şüpheleniyorum, çünkü bir dörtlüsü tanımak için yukarıdaki test muhtemelen çok fazla yanlış pozitif olmayacaktır. Listeden 4 fark seçmenin tüm yollarımız, dörtlüsü (hepsi ilişkiyi tatmin edecek) olacak ve geri kalanlar dörtlü (tatmin edici) olacaktır. sezgisel olarak olasılık ile ilişki ). Bu nedenle yanlış pozitifleri, yani dörtlü olmasalar bile testi geçen 4 tüpleri görmeyi umuyoruz . Parametreleriniz için bu, 225 dörtlü ve anlamına gelir.(K24)(K2)21/N((K24)(K2)2)/N(58905225)/251234diğer yanlış pozitifler; yani testi geçen 4 grubun yaklaşık yarısı dörtlüdür. Bu, yukarıdaki testin dörtlüsü tanımanın oldukça iyi bir yolu olduğu anlamına gelir. Dörtlüleri tanıyabildiğinizde, farklılıklar listesinin yapısını kurtarma konusunda gerçekten şehre gidebilirsiniz.


@DW: Teşekkür ederim, ama şimdi tüm olası dörtlülerin (toplam 225 + 234 = 459 olanlar) bulunduktan sonraki adımını merak ediyorum. Çakışmayan 3 dörtlüsü aramalı ve olası bir çözüm oluşturup oluşturmadığını test etmeli mi? Bunu nasıl verimli bir şekilde gerçekleştirebilirim? Belki çok zor değil çünkü çok fazla çakışma olmayacak.
bir konuk

@aguest, güzel soru! O zaman ne düşündüğümü hatırlayamıyorum. Ben o zaman, tek dörtlüsü ile başlayan 2 farklılıklara (örneğin kaynaklanan bunu örtüşen tüm diğerleri aramaya olabilir bir yaklaşım düşünme hatırlıyorum düşünüyorum nereye ), ama yok oradan nereye gideceğini biliyorum (yanlış pozitifleri nasıl filtreleyebilirim). a1,aj,b1,b2j2
DW

3

arasında görünmeyen sayıları yinelemeli olarak bulmaya dayanan farklı bir yaklaşım . biliyorsanız, kümesine ' ların aşırı yaklaştırılması . Benzer şekilde, , olduğunu bildiğimizde , 'nin . Açıkçası, ne kadar küçük olursa , bu aşırı yaklaşım o kadar yararlı olur ve aynı şey için de geçerlidir . Benim yaklaşımım, bu aşırı yaklaşımları yinelemeli olarak geliştirmeye, yani bu kümelerin boyutunu yinelemeli olarak azaltmaya dayanır (daha fazla değeri imkansız olarak dışladığımız için).{a1,,a6}Aa{a1,,a6}ABb{b1,,b6}BAB

Bu yaklaşımın temel için bir yöntemdir arıtma : aşırı yaklaşım verilen için 'nın ve bir aşırı yaklaşım için ', yeni bir aşırı yaklaşımının bulunması s için 'nın bu şekilde . Özellikle, normalde den küçük olacaktır bu bizim için aşırı yaklaşım rafine sağlar, böylece 's.AaBbAaAAAAa

Simetri ile, esas olarak aynı trick bize yönelik aşırı yaklaşımı rafine sağlayacak : 'aşırı yaklaşım verilen s için ler ve aşırı yaklaşımı' için s', yeni over üretecek -approximation için Var.bAaBbBb

Şimdi, nasıl iyileştirme yapacağımı söyleyeyim, o zaman bu sorun için tam bir algoritma elde etmek için her şeyi bir araya getireceğim. Aşağıda, nin farklılıklar kümesini göstermesine izin verin , yani ; verildiğinde rafine bir aşırı yaklaşım bulmaya odaklanacağız .DD={aibj:1i,j6}AA,B

Ayrıntılandırma nasıl hesaplanır. tek bir fark . kümesini göz önünde bulundurun . ' fazla yaklaştığı bilgisine dayanarak, en az bir öğesinin öğesi olması gerektiğini . Bu nedenle, elementlerin her birini, muhtemelen dahil edilecek bir sayı için "öneri" olarak ele alabiliriz . Öyleyse, tüm farklılıkları inceleyelim ve her biri için tarafından hangi sayıların "önerildiğini" belirleyelim .dDd+B={d+y:yB}Bbd+B{a1,,a6}d+BAdDd

Şimdi , bu işlem sırasında sayısının en az 6 kez emin olacağım. Neden? Fark nedeniyle olan , ve bunu işlem zaman, bu anlaşılacağı sayıların biri olacaktır (o garanti konum yana , mutlaka içerecektir ). Benzer şekilde, fark içinde bir yere görünür , ve neyin sebep olacak tekrar önerilebilir için. Bu şekilde, için doğru değerin en az 6 kez görüyoruz . Aynı durum ve için dea1a1b1Da1b1B(a1b1)+Ba1a1b2Da1a1a2a3, ve bunun gibi.

Bu nedenle, en az 6 kez önerilen sayılar kümesi olsun . Bu bir aşırı yaklaşım olacağından emin yukarıdaki yorumlara göre 'ın,.Aaa

Bir optimizasyon olarak, bulunmayan tüm önerileri hemen filtreleyebiliriz : başka bir deyişle, farkını , değerlerinin tümünü önerecek şekilde ele alabiliriz . Bu, sahip olmamızı sağlar . nin kesinlikle daha küçük olmasını umuyoruz ; garanti yok, ama her şey yolunda giderse, belki de olur.Ad(d+B)AAAAA

Bunu bir araya getirirsek elde etmek için rafine etme algoritması aşağıdaki gibidir:A,BA

  1. Let . Bu, çoklu öneriler kümesidir.S=dD(d+B)A

  2. Her bir değerin kaç kez göründüğünü sayın . , en az 6 kez görünen değerler kümesi olsun . (Bu, bir dizi yapı tarafından etkili bir şekilde uygulanabilecek başlangıçta başlangıçta tüm sıfır 251, ve sayısı her zaman önerilmektedir, sen artırmak ; en sonunda ile süpürme elemanlar, değeri 6 ya da arayan ) büyükSASasa[s]a

elde etmek için daraltmak için benzer bir yöntem oluşturulabilir . Temel olarak yukarıdaki şeyleri tersine çevirir ve bazı işaretleri çevirirsiniz: örneğin, yerine bakarsınız .A,BBd+Bd+A

Başlangıçta fazla tahmin nasıl hesaplanır. İlk fazla tahminimizi almak için bir fikir, olduğunu varsaymak (wlog) . Her değerinin arasında bir yerde görünmesi gerektiği sonucuna , bu nedenle farkları listesi 's için ilk aşırı olarak kullanılabilir . Ne yazık ki, bu bize 'ler için çok faydalı bir aşırı tahmin vermiyor .b1=0aiDDab

Daha iyi bir yaklaşım, 'nın birinin değerini de tahmin etmektir . Başka bir deyişle, olduğunu varsayıyoruz (wlog) ve 'ların ilk aşırı tahmini olarak kullanıyoruz . Sonra, bu 36 değerden hangisinin gerçekten ' biri olduğunu tahmin ediyoruz , diyelim . Bu bize 'ler için aşırı bir yaklaşım verir . Bu ilk aşırı yakınlaştırma , ardından yakınsamaya kadar tekrar tekrar iyileştirir ve sonucun doğru olup olmadığını test ederiz . bir tane bulana kadar 36 farklı tahminle (ortalama 6 tahmin yeterli olmalı) 36 defaya kadar tekrar ediyoruz.ab1=0A=Daaa1B=a1DbA,Ba1

Tam bir algoritma. Artık hesaplamak için tam bir algoritmaya sahip olabiliriz . Temel olarak, ve için bir başlangıç ​​aşırı yaklaşımı elde ederiz , daha sonra tekrar tekrar rafine edilir.a1,,a6,b1,,b6AB

  1. Tahmin edin: her , olduğunu tahmin edin . Aşağıdakileri yapın:zDa1=z

    1. Başlangıç aşırı yaklaşım: tanımlamak ve .A=DB=zD

    2. Yinelemeli ayrıntılandırma: Yakınsamaya kadar aşağıdakileri tekrar tekrar uygulayın:

      • Gelişmiş yeni bir aşırı yaklaşım için ve 's.A,BBb
      • Refine Yeni bir aşırı yaklaşımı olsun ait 's.A,BAa
      • Let ve .A:=AB:=B
    3. Başarıyı kontrol edin: Ortaya çıkan kümelerinin her birinin boyutu 6 ise, sorunun geçerli bir çözümü olup olmadığını test edin. Eğer öyleyse, dur. Değilse, aday değerleri üzerindeki döngüye devam edin .A,Bz

Analiz. Bu işe yarayacak mı? Sonunda ve mi yoksa sorunu tamamen çözmeden sıkışacak mı? Bunu öğrenmenin en iyi yolu muhtemelen test etmektir. Ancak, parametreleriniz için evet, etkili olacağını umuyorum.A={a1,,a6}B={b1,,b6}

# 1 yöntemini kullanırsak,çok büyük değil, sezgisel olarak setlerin boyutlarının monoton olarak küçülmesini bekliyorum. Türetmek düşünün dan . Her fark önerirdeğerleri; bunlardan biri doğrudur ve diğeri (sezgisel olarak) rastgele sayılar olarak ele alınabilir. Eğer arasında görünmeyen bir sayıdır 's, olasılık o filtreleme hayatta ve eklenir şey nedir ? Eh, hakkında önerilmesini|A|,|B|AA,Bd|B||B|1xaAa(|B|1)×36/251toplam kez (ortalama olarak, bunun karekökü hakkında standart sapma ile). Eğer , olasılık olduğu yanlış Survives filtreleme ile ilgili olmalıdır (süreklilik düzeltmesi ile binom normal yaklaşımıyla) kadar. (Eğer olasılık küçüktür , örneğin, daha küçük olan , beklemek ı boyutunu bekliyoruz.) ilgili olması , dan kesinlikle daha küçük olduğu için aşırı yaklaştırmayı kesinlikle geliştirecektir. . Örneğin, , o zaman bu buluşsal yöntemlere dayanarak|B|36xp=0.4|B||B|=30p0.25Ap(|A|6)+6|A||A|=|B|=36|A|18 , ki bu.|A|

Bu nedenle, çalışma süresinin çok hızlı olacağını tahmin ediyorum. Ben arıtma 3-5 hakkında tekrarları yakınlaşma, en tipik ve 6 hakkında tahminler yeterli olmasını bekliyoruz muhtemelen yeterli olacaktır. Her iyileştirme işlemi belki birkaç bin hafıza okuma / yazma içerir ve bunu 20-30 kez yapabiliriz. Bu nedenle, belirttiğiniz parametreler için bunun çok hızlı olmasını bekliyorum. Ancak, kesin olarak öğrenmenin tek yolu denemek ve iyi çalışıp çalışmadığını görmek.z


@DW: Uzun cevabınız ve çok fazla kelime yazmak için gösterdiğiniz çaba için çok teşekkür ederim !!! Açıklamanıza göre, buradaki algoritmanız oldukça doğru. Ve şimdi verimliliği test etmek için kodlayacağım.
bir konuk

@DW: Merhaba, açıklamanızı C ++ ile uyguladım. Algoritma hızlı çalışır ve arıtma adımı orijinal ve kümelerinin boyutlarını azaltır . Bununla birlikte, yakınsama o kadar mükemmel değil gibi görünüyor. Aslında, her tahmin için , ve nin son boyutları , programın kayıt çıktıma göre hala 10'dan fazladır. (ve ), daha fazla tekrarlama ile geliştirilemediğinde mevcut elemanların en sık sayısı 11'dir, ancak 10'un altında bir sayı göremiyorum. Ancak, bu her birini deneyerek sorunu çözülebilir hale getirdi 6 eleman seçildiABzDABAB
bir konuk

@DW: (Cotinued) her tahmin için son ve (bilgisayarımda son adımı uygulamadığım halde). Toplam miktar hesaplaması yaklaşık , tahmin ediyorum. Çok teşekkür ederim! ABz220
bir konuk

Üzgünüm, ama son yorumum çok uzun ve bunu ikiye bölmem gerekiyor.
bir konuk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.