Masalahnya datang langsung dari matematika komputasi, dan dapat berupa dinyatakan sebagai berikut:
Diberi matriks reguler , temukan secara efektif semua vektor sedemikian rupa sehingga , di mana adalah komponen maksimal dari vektor dalam modulus.
Saya memberikan algoritma di bawah ini, tetapi sangat tidak efisien, karena ia memiliki langkah lebih banyak daripada jumlah titik kisi. Masih tertahankan untuk dalam kasus saya, tetapi gagal sepenuhnya untuk , saya tidak punya banyak waktu; selain itu, saya juga ingin membuat beberapa pekerjaan pada dimensi yang lebih tinggi.
Algoritma saya saat ini didasarkan pada yang berikut (penafian: mengandung lebih banyak matematika): Pertama, hitung . Kemudian, kami mengamati bahwa . Ini berarti bahwa kita dapat menghitung dan kemudian mencoba semua vektor ; ada persis dari mereka. (Dan inilah masalahnya: jika dan , saya mendapatkan iterasi , yang merupakan urutan besarnya lebih besar dari jumlah poin yang saya pikir ada.)
Jawaban:
Berikut cara lain untuk melihat masalah: Anda memiliki kisi yang dihasilkan oleh kolom . Gunakan algoritma Lenstra – Lenstra – Lovász (LLL) untuk mendapatkan basis pengurangan dari kisi ini. Jika Anda mengganti dengan matriks baru yang dibentuk oleh output LLL, maka kolom akan tetap menghasilkan kisi yang sama, tetapi vektor basis akan lebih dekat menjadi ortogonal satu sama lain, dan entri harus memiliki besaran lebih kecil.M. M. M. M.- 1
Dari sana, itu juga akan membantu untuk mengikat setiap komponen secara terpisah: yaitu, Anda dapat mengikat komponen ke-oleh. (Omong-omong, ikatan tidak benar; kita perlu menggunakan jumlah elemen pada setiap baris, bukan maksimum.)v saya |vsaya| ∑dj = 1| (M.- 1)saya j| ∥ v∥∞≤ ∥M.- 1∥
Untuk nilai hingga sekitar 30, algoritma LLL akan langsung selesai secara praktis. Secara asimtotik, dibutuhkan , sehingga akan melambat untuk sangat besar , tetapi pada saat yang sama jumlah titik yang perlu kita periksa tumbuh secara eksponensial dalam , sehingga run-time LLL tidak benar-benar kemacetan. Di sisi lain, penghematan dalam jumlah poin yang perlu diperiksa bisa sangat besar. Saya menulis beberapa kode GAP untuk menghasilkan matriks reguler (stokastik) acak dan membandingkan batas-batas pada komponend O (d6) d d M. v yang kami peroleh menggunakan basis asli, dibandingkan dengan basis tereduksi LLL (Ngomong-ngomong, kita tidak perlu mengasumsikan bahwa matriksnya teratur; saya membuat batasan ini hanya karena ini adalah kasus dalam aplikasi Anda):
Output berikut (berdasarkan pada seed acak default, dengan ) tidak atipikal:d= 8
Sunting : Masalah ini adalah kasus khusus dari masalah umum penghitungan titik-titik kisi dalam poltop cembung, yang ternyata merupakan masalah yang dipelajari dengan baik, dan ada algoritma yang lebih efisien daripada yang dijelaskan di atas. Lihat ini makalah ini untuk survei.
sumber