Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2009, 21:02   #1
DEADmoroz333
Новичок
Джуниор
 
Регистрация: 09.11.2008
Сообщений: 2
По умолчанию Подсчитать число сравнений

Мне нужно подсчиать количество сравнений для алгоритма Кнута-Морриса-Пратта. Подскажите где нужно поставить счетчик. Я поставил счетчик srav, но кажется немного не так считает.
Вот сам код алгоритма:

Код:
int CStroksDlg::KMPSearch(CString str, CString substr)
{
{
	int  i, j, k, M, N;
	int  *d;
	srav=0;
	N = strlen(str);
	M = strlen(substr);
	j = 0;
    k = -1;
	d = new int[1000];
    d[0] = -1;
    while ( j< M - 1 )
	{
		while ( k >= 0 && substr[j] != substr[k] )
		{
			k = d[k];
			srav++;
		}
		j++;
		k++;
		if ( substr[j] == substr[k] )
		{
			d[j] = d[k];
		} else 
		{
			d[j] = k;
		}
	}

     i = 0;
     j = 0;
     while ( j < M && i < N )
	 {
		 while ( j >= 0 && str[i] != substr[j] ) 
		 { j = d[j]; }
		 i++;
		 j++;
		 srav++;
     }

     if ( j == M ) { return i - M; }
     else { return -1; }
}
}

Последний раз редактировалось Sazary; 17.12.2009 в 02:31.
DEADmoroz333 вне форума Ответить с цитированием
Старый 16.12.2009, 21:05   #2
DEADmoroz333
Новичок
Джуниор
 
Регистрация: 09.11.2008
Сообщений: 2
По умолчанию

Тоже самое для алгоритма Бойера-Мура. Я не до конца понимаю сами алгоритмы, так что мне трудно самому разобраться. Моё счетчик srav, но считает как то не прально)

Код:
int CStroksDlg::BMSearch(CString str, CString substr)
{
int  Pos, ssl, sl, i;
	int  BMT[256];
srav=0;

	ssl = strlen(substr);
	sl = strlen(str);

	for ( i = 0; i < 256; i ++ )
	{ 
		BMT[i] = ssl-1;
		srav++;
	}

	for ( i = ssl-1; i >=0; i-- )
	{srav++;
		if ( BMT[(short)(substr[i])] == ssl-1 ) 
		{
			BMT[(short)(substr[i])] = ssl - i - 1; 
		}
	}

	Pos = ssl - 1;
	while ( Pos < sl )
	{srav++;
		if ( substr[ssl - 1] != str[Pos] )
		{
			Pos = Pos + BMT[(short)(str[Pos])];
		}
		else 
		{ 
			for ( i = ssl - 2; i >= 0; i-- )
			{
				if ( substr[i] != str[Pos - ssl + i + 1] ) 
				{
					Pos++;
					break;
				}
				else 
				{ 
					if ( i == 0 ) 
					{
						return Pos - ssl + 1;
					}
				}
			}
		}
	}
	return -1;
}

Последний раз редактировалось Sazary; 17.12.2009 в 02:31.
DEADmoroz333 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая за меньшее число ходов отгадывает загаданное число gomz007 Помощь студентам 16 08.11.2009 12:57
выделить цветом и подсчитать число слов,удовлетворяющих следующим условиям FANDREY21 Паскаль, Turbo Pascal, PascalABC.NET 2 02.02.2009 19:06
Вывести число, предшествующее первому отрицательному и число, следующее за последним отрицательным Rid Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2008 16:50
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43