簡體   English   中英

Java Word搜索求解器設計方法

[英]Java Word Search Solver Design Approach

我正在編寫一個程序,它是一個單詞搜索解決方案,並且好奇是否有比我正在采用的方法更好的方法。 該程序包含一個字符網格,這些字符被認為是難題,然后是換行符和位於矩陣中的單詞。

我的問題是,在查找每個字符串的開始和結束字符時,最好是使用每個方向的嵌套循環將其牢固地穿過拼圖,還是可以使用某種直線檢測算法來簡化此過程?

單詞可以是水平,垂直或對角線,也可以相反。

我真正想做的是在2d char數組(Puzzle)內繪制char數組(Word)的起點和終點。

拼圖的例子
HGAMONIHRA
AOMOKAWONS
NFROLBOBDN
ARFSIHCAGE
LNIEEWONOK
GOLFUNDTHC
KOCATAOHBI
AMRERCGANH
SLGFAMALLC
ALLIGATORX



RHINO
JABBERWOCKY


鱷魚

青蛙
班薩
駝鹿
駱駝

假設我只使用了一系列循環,我不確定在所有方向進行檢查的最佳方法。 到目前為止,我只是在水平搜索單詞

                boolean over = false;
                boolean foundit = false;
                String word = new String(letters);

                for (int i = 0; (i < puzzle.length) && (!over); i++) {
                    for (int j = 0; (j < puzzle[i].length) && (!over); j++) {

                        // Use (i,j) as the starting point.
                        foundit = true;

                        // Look through each letter in word
                        for (int k = 0; (k < letters.length) && (foundit); k++) {
                            if ((j + k >= puzzle[i].length)
                                    || (letters[k] != puzzle[i][j + k])) {
                                // It didn't Match
                                foundit = false;
                            }
                        }
                        // Success if we made it through all the characters
                        if (foundit) {
                            System.out.println(word + " found in row=" + i
                                    + " col=" + j);
                            over = true;
                        }

                    }
                }

                if (!foundit) {
                    System.out.println(word + " not found");
                }

在垂直,對角線和反向找到它們的任何指針?

蠻力行將不會是可怕的。 您可以使用更快的算法,但是初始開銷可能會超過收益,因此請確保以一個典型示例為基准。

您可以嘗試將整個拼圖放入multi_hashmap中,其中字母是鍵,位置是值。 這樣可以使搜索速度更快(用O(1)進行查找,而不是用O(n)來查找第一個字母),但是您可能得不到任何好處,因為您必須遍歷整個難題才能將其放入哈希圖中。

蠻力非常接近O(n * m),其中n是拼圖大小,m是隱藏單詞的數量。 (我假設單詞長度受限制,例如20。)

使用哈希圖並不能帶來太多收益。 它大約是O(n + m),但是對於較小的拼圖來說,時間差不大。 但是,漸近絕對更好。 兩者都做,比較他們的時間。 那是最好的認識方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM