|
|
От: | PK Sly | http://www.vocord.ru/ |
| Дата: | 28.03.04 07:39 | ||
| Оценка: | |||
C>p(0,a) = 1
C>p(1,b) = 2
C>p(2,c) = 3
C>p(3,d) = 4
C>p(4,e) = 5
C>abcabcabcde
C>012012012345
|
|
От: | ch00k | |
| Дата: | 28.03.04 08:12 | ||
| Оценка: | |||
C>>p(0,a) = 1
C>>p(1,b) = 2
C>>p(2,c) = 3
C>>p(3,d) = 4
C>>p(4,e) = 5
C>>abcabcabcde
C>>012012012345
Алгоритмы: построение и анализ
|
|
От: | PK Sly | http://www.vocord.ru/ |
| Дата: | 28.03.04 09:58 | ||
| Оценка: | |||
тогда проход будет такой:text = "abcabcabcdef", substring = "abcabcdef"
автомат =
(0,a) = 1
(1,b) = 2
(2,c) = 3
(3,a) = 4
(4,b) = 5
(5,c) = 6
(6,d) = 7
(7,e) = 8
(8,f) = 9
(9,*) = exit
(остальное) = 0
или я неправильно написал автомат?abcabcabcdef
012345012000
C>Алгоритмы: построение и анализ
|
|
От: | ch00k | |
| Дата: | 28.03.04 10:55 | ||
| Оценка: | |||
PS>text = "abcabcabcdef", substring = "abcabcdef"
PS>или я неправильно написал автомат?
да, неправильно. Нужен еще один переход
[q]
p(0,a) = 1
p(1,b) = 2
p(2,c) = 3
p(3,a) = 4
p(4,b) = 5
p(5,c) = 6
p(6,d) = 7
p(7,e) = 8
p(8,f) = 9
p(5,a) = 3
остальные — в 0
abcabcabcdef
0123453456789
|
|
От: | PK Sly | http://www.vocord.ru/ |
| Дата: | 28.03.04 12:29 | ||
| Оценка: | |||
C>p(0,a) = 1
C>p(1,b) = 2
C>p(2,c) = 3
C>p(3,a) = 4
C>p(4,b) = 5
C>p(5,c) = 6
C>p(6,d) = 7
C>p(7,e) = 8
C>p(8,f) = 9
C>p(5,a) = 3
C>остальные — в 0
C>abcabcabcdef
C>0123453456789
Тогда работать это будет так:p(6,a) = 4
abcabcabcdef
0123456456789
|
|
От: | ch00k | |
| Дата: | 28.03.04 12:42 | ||
| Оценка: | 6 (1) | ||
PS>Тогда работать это будет так:PS>p(6,a) = 4
да, точно.PS>abcabcabcdef
PS>0123456456789
s/(\w+)\s*(\d+)/$2$1/|
|
От: | PK Sly | http://www.vocord.ru/ |
| Дата: | 28.03.04 18:43 | ||
| Оценка: | |||
|
|
От: | Аноним | |
| Дата: | 28.03.04 23:58 | ||
| Оценка: | |||
|
|
От: |
Alexander Fenster
|
http://fenster.forestnet.org |
| Дата: | 28.03.04 23:59 | ||
| Оценка: | |||
|
|
От: |
Serginio1
|
https://habrahabr.ru/users/serginio1/topics/ |
| Дата: | 30.03.04 14:59 | ||
| Оценка: | |||
Int32 LengthIndexArray, CountIndex;
Int32 LenOldPattern, LenNewPattern;
Int32 NewLen;
char SeachChar, FirstSeachChar;
Int32 CounEquls;
Int32 CopyCount, PosOldPatern, IndexInResult, IndexInOrigString;
if (OldPattern==null)
return;
LenOldPattern = OldPattern.Length;
if (NewPattern==null)
LenNewPattern=0;
else
LenNewPattern = NewPattern.Length;
if (_len == 0)
{
return;
}
char[] OldPatternChar = OldPattern.ToCharArray();
Int32[] IndexArray = new Int32[16];
LengthIndexArray = 16;
CountIndex = 0;
CounEquls = 0;
FirstSeachChar = OldPatternChar[0];
SeachChar = FirstSeachChar;
char TwoChar = OldPatternChar[1];
//=======================================================
//============================================================
if (LenOldPattern == 1)
{
if (LenNewPattern == 1)
{
Replace(FirstSeachChar, NewPattern[1]);
return;
}
;
for (Int32 i = 0; i < _len; i++)
if (_buf[i] == FirstSeachChar)
{
if (CountIndex == LengthIndexArray)
{
LengthIndexArray = LengthIndexArray * 2;
Int32[] TempIndexArray = new Int32[LengthIndexArray];
Array.Copy(IndexArray, 0, TempIndexArray, 0, IndexArray.Length);
IndexArray = TempIndexArray;
}
IndexArray[CountIndex] = i;
CountIndex++;
}
}
//========================================================================
else
{
Int32 TwoFirstChar = 0;
for (Int32 i = 1; i < LenOldPattern; i++)
if (OldPatternChar[i] == FirstSeachChar)
{
TwoFirstChar = i;
break;
}
//=====================================================================
if (TwoFirstChar > 0)
{
Int32 ii = 0;
while (ii < _len)
{
if (_buf[ii] == SeachChar)
{
CounEquls++;
if (CounEquls == LenOldPattern)
{
if (CountIndex == LengthIndexArray)
{
LengthIndexArray = LengthIndexArray * 2;
Int32[] TempIndexArray = new Int32[LengthIndexArray];
Array.Copy(IndexArray, 0, TempIndexArray, 0, IndexArray.Length);
IndexArray = TempIndexArray;
}
IndexArray[CountIndex] = ii - LenOldPattern + 1;
CountIndex++;
SeachChar = FirstSeachChar;
CounEquls = 0;
}
else
SeachChar = OldPatternChar[CounEquls];
}
else
{
if (CounEquls > 0)
{
if (CounEquls >= TwoFirstChar)
{
ii = ii - CounEquls + TwoFirstChar + 1;
SeachChar = TwoChar;
CounEquls = 1;
continue;
}
if (_buf[ii] == FirstSeachChar)
{
CounEquls = 1;
SeachChar = OldPattern[1];
}
else
{
SeachChar = FirstSeachChar;
CounEquls = 0;
}
}
// CounEquls:=0;
}
ii++;
}
}
//=======================================================
else
for (Int32 i = 0; i < _len; i++)
{
if (_buf[i] == SeachChar)
{
CounEquls++;
if (CounEquls == LenOldPattern)
{
if (CountIndex == LengthIndexArray)
{
LengthIndexArray = LengthIndexArray * 2;
Int32[] TempIndexArray = new Int32[LengthIndexArray];
Array.Copy(IndexArray, 0, TempIndexArray, 0, IndexArray.Length);
IndexArray = TempIndexArray;
}
IndexArray[CountIndex] = i - LenOldPattern + 1;
CountIndex++;
SeachChar = FirstSeachChar;
CounEquls = 0;
}
else
SeachChar = OldPatternChar[CounEquls];
}
//else
//{
// SeachChar = FirstSeachChar;
// CounEquls = 0;
//}
else
{
if (CounEquls > 0)
{
if (_buf[i] == FirstSeachChar)
{
CounEquls = 1;
SeachChar = TwoChar;
}
else
{
SeachChar = FirstSeachChar;
CounEquls = 0;
}
}
// CounEquls:=0;
}
}
}
if (CountIndex == 0)
{
return;
}|
|
От: |
Кодт
|
|
| Дата: | 17.01.05 18:55 | ||
| Оценка: | |||
abcdea -- ищем
...bea.....
abcdea
++
-
abcdea
...aea.....
abcdea
++
-
abcdea -- сдвиг по "глупому" правилу
abcdea -- дефолт, сдвиг на 1 позицию
abcdea -- осмысленный сдвигconst int Alphabet = 256;
const int Entries = 4; // количество вхождений, запомненное в таблице
const int CutOff = 100; // отсечка поиска по строке (чтобы не задерживаться на длинных образцах)
int offsets[Alpabet][Entries]; // offsets[c][] - индексы крайне правого, второго справа и т.д.
int lookup_offset(const char* pattern, int curpos, char ch)
{
// смотрим в таблице
for(int attempt=0; attempt<Entries; ++attempt)
{
int offs = offsets[ch][attempt];
if(offs < curpos) return offs;
}
// смотрим в строке
int cutoff = max(0, curpos-CutOff);
while(curpos >= cutoff && pattern[curpos] != ch) --curpos;
return curpos;
}
Перекуём баги на фичи!
|
|
От: |
Кодт
|
|
| Дата: | 20.01.05 13:00 | ||
| Оценка: | 2 (1) | ||
k s p
T ----------xxxyyyyxxxc------------
P xxxyyyyxxx----
P xxxyyyyxxx-----
k p k s p
T ----------xxxcyyyxxxc------------
P xxxcyyyxxx----
xxxcyyyxxx----
k p
Перекуём баги на фичи!
|
|
От: | Аноним | |
| Дата: | 06.08.05 16:45 | ||
| Оценка: | |||
|
|
От: | b_eugene | |
| Дата: | 16.11.05 15:15 | ||
| Оценка: | |||