Russian Qt Forum
Ноябрь 23, 2024, 01:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нахождение количества повторяющихся подстрок и их частоты  (Прочитано 2557 раз)
Astrologer
Гость
« : Ноябрь 02, 2010, 21:13 »

Всем привет. Вот такая задача есть. Найти количество повторяющихся подстрок можна за O(n*n) с помощью Кнута-Пратта.
http://acmpskov.mybb.ru/viewtopic.php?id=27
Код
C++ (Qt)
 
void duplicateFrequncyPair (string s, int& dupCount, double& frequency)
{  s = "thefoxfox";
   int n = s.length();
   int subCount = n * (n+1) /2;//substrings count
   int dupCount = subCount;//duplicates count
 
 for (int i = n; i > 0; --i)
   {
     string subs = s.substr(0, i);
     int length = subs.length();
     vector<int> pi = prefix_function(subs);
     dupCount-=(*max_element(pi.begin(), pi.end()));//unique count
   }
dupCount = subCount - dupCount;//duplicates now
frequency = dupCount / subCount;
}
 
vector<int> prefix_function (string s) {
       int n = (int) s.length();
       vector<int> pi (n);
       for (int i=1; i<n; ++i) {
               int j = pi[i-1];
               while (j > 0 && s[i] != s[j])
                       j = pi[j-1];
               if (s[i] == s[j])  ++j;
               pi[i] = j;
       }
       return pi;
}
 

Правильно ли я делаю?
« Последнее редактирование: Ноябрь 02, 2010, 22:06 от Astrologer » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 20.