Оптимизация простого алгоритма поиска

Вы успешно создаете одно случайное число. Вам просто нужно сделать это 10 раз, чтобы получить 10 разных чисел.

import java.util.Random;
class RandomNumbers {
    public static void main (String [] args)
    {
        for (int i=0; i<10;i++){
            int random = (int)(Math.random()* (50 + 1));
            System.out.println (random);
    }
}
8
задан dfa 14 May 2009 в 10:40
поделиться

5 ответов

Ваш код мне кажется нормальным. Я предлагаю небольшие изменения:

Поскольку вы перебираете все возможные комбинации, вы можете получить toLowerCase () в начале.

Кроме того, если точное совпадение уже произошло, вы не должны Не нужно выполнять еще один равно .

    result = result.toLowerCase();
    searchStr = searchStr.toLowerCase();

    String[] resultWords = result.split(" ");
    String[] searchWords = searchStr.split(" ");
    int score = 0;
    for (String resultWord : resultWords) {
        boolean exactMatch = false;
        for (String searchWord : searchWords) {
            if (!exactMatch && resultWord.equals(searchWord)) {
                exactMatch = true;
                score += 3;
            } else if (resultWord.contains(searchWord))
                score++;
        }
    }

Конечно, это очень базовый уровень. Если вас действительно интересует эта область информатики и вы хотите узнать больше о внедрении поисковых систем, начните с этих терминов:

3
ответ дан 6 December 2019 в 00:08
поделиться

Вы можете использовать регулярные выражения для поиска шаблонов и длины совпадающих шаблонов (для последней классификации / оценки).

0
ответ дан 6 December 2019 в 00:08
поделиться
  • корень
  • для чувствительности к регистру аббревиатур важен, то есть SUN ; любое слово, которое соответствует как содержанию, так и регистру, должно иметь вес более 3 баллов (5 или 7)?
  • используйте шаблон разработки стратегии

Например, рассмотрим эту наивную модель оценки:

interface ScoreModel {
     int startingScore();
     int partialMatch();
     int exactMatch();
}

...

int search(String result, String searchStr, ScoreModel model) {
    String[] resultWords = result.split(" ");
    String[] searchWords = searchStr.split(" ");
    int score = model.startingScore();

    for (String resultWord : resultWords) {
        for (String searchWord : searchWords) {
            if (resultWord.equalsIgnoreCase(searchWord)) {
                score += model.exactMatch();
            } else if (resultWord.toLowerCase().contains(searchWord.toLowerCase())) {
                score += model.partialMatch();
            }
        }
    }

    return score;
}
1
ответ дан 6 December 2019 в 00:08
поделиться

Базовая оптимизация может быть выполнена путем предварительной обработки вашей базы данных: не разбивайте записи каждый раз на слова.

Создайте список слов (предпочитайте хеш-код или двоичное дерево для ускорения поиска в списке) для каждую запись во время добавления в БД, удалите все слишком короткие слова, строчные буквы и сохраните эти данные для дальнейшего использования.

Выполните те же действия со строкой поиска при запуске поиска (разделение, нижний регистр, очистка) и используйте эти слова список для сравнения с каждым списком слов записи.

0
ответ дан 6 December 2019 в 00:08
поделиться

1) Сначала вы можете отсортировать поисковые слова. Вы можете выйти из цикла, как только слово результата будет в алфавитном порядке после вашего текущего поискового слова.

2) Еще лучше, отсортируйте оба, а затем пройдитесь по обоим спискам одновременно, чтобы найти, где встречаются какие-либо совпадения.

0
ответ дан 6 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: