Berapa banyak kata dengan panjang

9

DIedit UNTUK MENAMBAH : Pertanyaan ini sekarang pada dasarnya dijawab; silakan lihat entri blog ini untuk lebih jelasnya. Terima kasih kepada semua orang yang mengirim komentar dan jawaban di sini.


PERTANYAAN ASLI

Mudah-mudahan ini adalah versi pertanyaan yang lebih cerdas dan lebih baik dari pertanyaan yang saya ajukan di MathOverflow. Ketika saya mengajukan pertanyaan itu, saya bahkan tidak tahu nama bidang matematika dari masalah saya. Sekarang saya cukup yakin itu terletak pada Algoritma Combinatorics pada Partial Words. (Buku terbaru tentang subjek di sini .)

Saya ingin membuat daftar kata pada huruf . Setiap kata memiliki panjang tepat . Kesepakatannya adalah, jika ada dalam daftar, di mana adalah simbol wildcard / tidak peduli, maka tidak akan pernah muncul lagi dalam daftar. (Hal yang sama berlaku jika , atau jika dan karenanya kata kunci yang dilarang adalah .)k a j b sebuah j b a = b j = 0 a blkajbajba=bj=0ab

Contoh di mana dan :l = 5k=4l=5

b d c e d c b a d c a e e d a dabcd
bdce
dcba <- dilarang karena muncul di baris di atas <- dilarang karena muncul di baris pertamadc
aeedad

Literatur tentang "kata-kata parsial yang dapat dihindari" yang saya temukan semuanya bersifat infinitary - pada akhirnya beberapa pola kata tidak dapat dihindari jika ukuran kata cukup besar. Saya ingin menemukan versi teoretis dari teorema semacam itu. Jadi, pertanyaan:

Mengingat kata parsial bentuk dalam alfabet l huruf, berapa banyak kata-kata panjang k menghindari hal itu, dan mereka dapat secara eksplisit diproduksi dalam waktu polinomial?ajblk

Saya tidak berharap pertanyaan di atas menjadi sulit, dan, kecuali ada kehalusan saya hilang, saya bisa menghitungnya sendiri. Alasan sebenarnya saya memposting di situs ini adalah karena saya perlu tahu lebih banyak tentang properti dari daftar kata tersebut untuk aplikasi saya, jadi saya berharap seseorang dapat menjawab pertanyaan tindak lanjut:

Apakah ini telah dipelajari secara umum? Apa beberapa makalah yang mempertimbangkan, bukan hanya apakah sebagian kata pada akhirnya tidak dapat dihindari, tetapi "berapa lama" sebelum menjadi tidak dapat dihindari?

Terima kasih.

Aaron Sterling
sumber
(1) Saya tidak dapat memahami korespondensi antara pertanyaan pertama Anda dan contoh yang dinyatakan sebelumnya. Apa input dalam contoh Anda? (2) Dalam pertanyaan pertama Anda, apakah Anda menggunakan k untuk dua tujuan berbeda?
Tsuyoshi Ito
Mengenai (2), ya saya membuat kesalahan, sekarang diedit, terima kasih.
Aaron Sterling
Mengenai (1), saya ingin tahu "berapa banyak ruang yang tersisa" setelah sebagian kata muncul. Tapi ya, pertanyaan sebenarnya adalah bagaimana membuat daftar seperti yang muncul dalam contoh (tanpa kata-kata parsial yang dilarang). Jadi inputnya adalah nilai dan l , dan jumlah kata yang diinginkan untuk dihasilkan dalam daftar, yang semuanya memiliki "penghindaran properti kata parsial yang sebelumnya muncul." kl
Aaron Sterling
2
@ Harun, saya tidak tahu apa aplikasi utama Anda, tetapi urutan Davenport-Schinzel (dan generalisasi) bertanya tentang panjang maksimum string yang tidak mengandung pola pengulangan tertentu. Ini gagasan yang terkait.
Suresh Venkat
1
Seth Pettie telah mempelajari beberapa generalisasi yang sangat bagus untuk para pelarian yang dilarang juga.
Suresh Venkat

Jawaban:

4

Berikut adalah kasus khusus: jumlah kata biner panjang sehingga tidak ada dua yang muncul berturut-turut adalah F ( k + 3 ) , di mana F ( n ) adalah n t h nomor Fibonacci (dimulai dengan F ( 1 ) = 1 , F ( 2 ) = 1 ). Buktinya adalah melalui representasi Zeckendorf .kF(k+3)F(n)nthF(1)=1,F(2)=1

EDIT: Kami dapat memperpanjang kasus khusus awal ini ke dalam kasus khusus yang sedikit lebih besar dari . Pertimbangkan string dengan panjang k di atas alfabet ukuran l + 1 sehingga huruf a tidak muncul dua kali secara berurutan. Biarkan f ( k ) menjadi jumlah string seperti itu (yang akan kita sebut "valid"). Kami mengklaim bahwa: f ( k ) = l f ( k - 1 ) + l f ( k - 2 )Sebuah0Sebuahkl+1Sebuahf(k)

f(k)=lf(k-1)+lf(k-2)
Intuisi adalah bahwa kita dapat membuat string panjang k yang validdengan: a) menyatukan salah satuhuruf l yang bukan a ke string dengan panjang k yang valid - 1 , atau b) bersebelahan dengan huruf a dan kemudian huruf lain selain a dengan panjang k k - 2 yang valid.
f(0)=1,f(1)=l+1
klSebuahk-1SebuahSebuahk-2

Anda dapat memverifikasi bahwa berikut ini adalah bentuk tertutup untuk kambuh di atas: mana kita memahamisaat.

f(k)=saya=0k(k+1-sayasaya)lk-saya
i>n(nsaya)=0saya>n

EDIT # 2: Mari kita lepaskan satu case lagi - a . Kami akan memanggil string melalui alfabet elemen- yang tidak mengandung substring , "valid" dan biarkan menunjukkan set string panjang yang valid . Selanjutnya, mari kita mendefinisikan menjadi subset dari terdiri dari string yang dimulai dengan dan menjadi yang tidak dimulai dengan . Akhirnya, biarkan,,.l a b S k k T k S k b U k b f ( k ) = | S k | g ( k ) = | T k | h ( k ) = | U k |0b,SebuahblSebuahbSkkTkSkbUkbf(k)=|Sk|g(k)=|Tk|h(k)=|Uk|

Kami mengamati bahwa dan . Selanjutnya, kami menyimpulkan rekurensi berikut: Yang pertama berasal dari fakta bahwa menambahkan ke awal setiap elemen menghasilkan elemen . Yang kedua berasal dari pengamatan bahwa kita dapat membangun elemen dengan menambahkan karakter apa pun tetapi ke depan elemen atau dengan menambahkan karakter apa pun kecuali atau ke bagian depan elemen apa pun di .g ( 1 ) = 1 , h ( 1 ) = l - 1 , f ( 1 ) = l g ( k + 1 )g(0)=0,h(0)=1,f(0)=1g(1)=1,h(1)=l-1,f(1)=l bSkTk+1Uk+1bUkabTk

g(k+1)=f(k)h(k+1)=(l-1)h(k)+(l-2)g(k)
bSkTk+1Uk+1bUkSebuahbTk

Selanjutnya, kami mengatur ulang persamaan perulangan untuk memperoleh:

f(k+1)=g(k+1)+h(k+1)=f(k)+(l-1)h(k)+(l-2)g(k)=f(k)+(l-1)f(k)-g(k)=lf(k)-f(k-1)

Kita bisa mendapatkan solusi bentuk-tertutup yang agak buram untuk pengulangan ini dengan sedikit campur aduk dengan menghasilkan hal-hal fungsi atau, jika kita malas, langsung menuju ke Wolfram Alpha . Namun, dengan sedikit googling dan mengaduk-aduk di OEIS , kami menemukan bahwa kami sebenarnya memiliki: mana adalah Chebyshev dari jenis kedua (!) .U k k t h

f(k)=Uk(l/2)
Ukkth
mhum
sumber
Itu sangat menarik, terima kasih.
Aaron Sterling
2

Pendekatan yang sama sekali berbeda untuk pertanyaan pertama menggunakan kembali jawaban untuk pertanyaan terakhir tentang menghasilkan kata-kata dalam bahasa reguler : cukup untuk menerapkan algoritma ini untuk panjang pada bahasa biasa dimana adalah alfabet.Σ * a Σ j b Σ * ΣkΣSebuahΣjbΣΣ

Sylvain
sumber
Terima kasih. Saya bertanya-tanya apakah mungkin ada koneksi, dan jawaban Anda di sini memberi saya dorongan yang saya butuhkan untuk melihat surat-surat yang dirujuk di sana, dan salah satu dari mereka pasti memecahkan salah satu masalah yang saya pertimbangkan.
Aaron Sterling
0

Diperbarui: jawaban ini salah :

dengan asumsi adalah tetap, kita bisa menghitung jumlah cara pola a j b dapat dicocokkan: pertama sebuah simbol dapat dicocokkan di beberapa posisi 1 i k - j - 1 , dan kami memiliki l i - 1 kemungkinan sebelum titik itu, l j antara a dan b , dan l k - j - i - 1 untuk sisa string, sehingga total kjSebuahjbSebuah1sayak-j-1lsaya-1ljSebuahblk-j-saya-1kasing. Sebagaimana dicatat oleh Tsuyoshi Ito di komentar, jumlah initidakjumlah kata yang berbeda pencocokansebuahjbsejak satu kata bisa cocok dengan pola yang sama dengan cara yang berbeda. Misalnyasebuahsebuah

saya=1k-j-1lsaya-1ljlk-j-saya-1=(k-j-1)lk-2
SebuahjbSebuahSebuahcocok tiga kali dalam , sebuah b dua kali dalam satu b a b , dan a b dua kali di sebuah a b b . Kita dapat mencoba menghitung jumlah cara pencocokan pola beberapa kali dan menunjukkan ekspresi "inklusi-pengecualian", tetapi cara-cara pola yang mungkin tumpang tindih membuat ini terlalu lama.SebuahSebuahSebuahSebuahSebuahbSebuahbSebuahbSebuahbSebuahSebuahbb

Untuk pertanyaan pertama, di bawah pemahaman bahwa tidak tetap, yaitu bahwa kita ingin menghindari embedding kata a b :jSebuahb

  • baik simbol pertama tidak pernah muncul, yang menyumbang ( l - 1 ) k kata mungkin,Sebuah(l-1)k
  • atau muncul pertama kali pada beberapa posisi 1 i k , maka kita tidak dapat menggunakan b pada sisa kata: ada ( l - 1 ) i - 1 pilihan untuk faktor hingga a , dan ( l - 1 ) k - i pilihan untuk sisanya, memberikan total k i = 1 ( l - 1 ) i - 1( l - 1Sebuah1sayakb(l-1)saya-1Sebuah(l-1)k-saya kata yang mungkin. Apakah a = b tidak relevan.saya=1k(l-1)saya-1(l-1)k-saya=k(l-1)k-1Sebuah=b

Untuk pertanyaan kedua, saya tidak punya banyak saran; ada hubungan dengan embeddings kata, tetapi hasil yang saya tahu tentang urutan buruk untuk Higman Lemma tidak segera berlaku.

Sylvain
sumber
Terima kasih banyak, Sylvain, meskipun menurut saya itu tidak benar. Kita dapat menggunakan nanti dalam kata jika a muncul. Kami hanya tidak bisa menggunakan b jika ada yang persis j huruf di antara sebuah dan b , jika sebuah j b muncul sebelumnya. Mungkin saya salah mengerti argumen Anda. bSebuahbjSebuahbSebuahjb
Aaron Sterling
jj
1
Saya tidak berpikir bahwa kasus j-tetap benar. Misalnya, jika k = 4 dan j = 1, kata aabb dikurangi dua kali. Saya belum membaca kasus non-fix-j.
Tsuyoshi Ito
@ Tsuyoshi Ito: Anda benar, tidak ada kecocokan unik dalam kasus itu.
Sylvain
Harap tandai jawaban yang salah.
Tsuyoshi Ito