Teman saya memberi saya masalah yang menurutnya mudah, tetapi saya tidak dapat menemukan algoritma yang baik untuk melakukannya.
Anda diberi input 100 kata bahasa Inggris acak. Anda harus menemukan string kata terpanjang di mana huruf terakhir dalam satu kata cocok dengan huruf pertama di kata berikutnya. Anda hanya dapat menggunakan setiap kata satu kali.
Misalnya, jika Anda diberi kata "cat", "dog", "that", string terpanjang yang bisa Anda buat adalah "cat -> that". Jika Anda diberi kata "mouse", "moose", "unicorn", string terpanjang yang dapat Anda buat hanyalah satu kata (karena tidak satu pun dari kata-kata itu terhubung). Jika Anda diberi kata "burung", "hidangan", "harb", string terpanjang yang bisa Anda buat adalah "harb -> bird -> dish" (atau "dish -> harb -> bird" atau "bird - > hidangan -> harb ").
Saya datang dengan ide pemodelan ini sebagai grafik siklik diarahkan. Setiap simpul hanya akan menjadi kata, dengan simpul menuju setiap kata / simpul yang dimulai dengan huruf yang diakhiri dengan kata ini.
+-------+ \ +------+
| cat |-----------| that |
+-------+ / +------+
| |
\|/ |
+-------+ / |
| the |--------------+
+-------+ \
Masalah ini tampaknya merupakan pencarian jalur terpanjang , yaitu NP-Hard.
Apakah ada cara yang lebih baik untuk melakukannya? Atau bahkan semacam algoritma perkiraan yang bisa digunakan? Atau beberapa cara untuk mengeksploitasi kualitas bahasa Inggris untuk mengurangi ruang pencarian?