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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2015, 18:08   #1
HelloWold
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию Удаление дублей.

Здравствуйте.
Есть задача : удалить дубликаты сочетаний слов.
Например, данные словосочетания в транслите совпадают, следовательно нужно оставить какое-то одно:
Код HTML:
3д очки самсунг инструкция
3d очки samsung инструкция
Так вот, для этого я написал следующий код:
Код:
	TStringList *Key = new TStringList();
	Key->Sorted = true;
	Key->Duplicates = System::Classes::TDuplicates::dupIgnore;
	Key->LoadFromFile(ExtractFileDir(Application->ExeName)+"\\test_key.txt");
	TStringList *TKey = new TStringList();
	for(int i = 0; i < Key->Count; i++)
		TKey->Add(Translate(Key->Strings[i])); // транстит
	for(int i = 0; i < TKey->Count; i++)
		for(int j = i + 1; j < TKey->Count; j++)
			if(TKey->Strings[i] == TKey->Strings[j])
			{
				TKey->Delete(j);
				Key->Delete(j);
			} 
	Memo3->Lines->Text = Key->Text;
	delete Key, TKey;
Этот код работает, но очень долго(конечно, 3 цикла).
Из данного списка:
Код HTML:
3д очки самсунг инструкция
3d очки samsung инструкция
aллигaтор сигнaлизaция инструкция
alligator сигнализация инструкция
2109 вaз инструкция
2109 ваз инструкция
1 3 инструкция
102 инструкция
148 н инструкция
3д очки самсунг инструкция
3d очки samsung инструкция
aллигaтор сигнaлизaция инструкция
alligator сигнализация инструкция
2109 вaз инструкция
2109 ваз инструкция
1 3 инструкция
102 инструкция
148 н инструкция
2109 ваз инструкция
Остается только это:
Код HTML:
1 3 инструкция
102 инструкция
148 н инструкция
2109 вaз инструкция
3d очки samsung инструкция
alligator сигнализация инструкция
И решил я его переписать, что бы отрабатывал он пошустрей:
Код:
	TStringList *Key = new TStringList();
	Key->LoadFromFile(ExtractFileDir(Application->ExeName)+"\\test_key.txt");
	TStringList *TKey = new TStringList();
	TKey->Sorted = true;
	TKey->Duplicates = System::Classes::TDuplicates::dupIgnore;
	int count(0);
	for(int i = 0; i < Key->Count; i++)
	{
		TKey->Add(Translate(Key->Strings[i]));
		if(TKey->Count == i - count)
		{
			Key->Delete(i);
			count++;
		}
	}
	Memo3->Lines->Text = Key->Text;
	delete Key, TKey;
Но данный код(с одним циклом) уже не пашет.
Получается вот так:
Код HTML:
3д очки самсунг инструкция
aллигaтор сигнaлизaция инструкция
alligator сигнализация инструкция
2109 вaз инструкция
1 3 инструкция
102 инструкция
148 н инструкция
3d очки samsung инструкция
alligator сигнализация инструкция
2109 ваз инструкция
1 3 инструкция
148 н инструкция
Прошу помощи, в оптимизации кода. Спасибо.
HelloWold вне форума Ответить с цитированием
Старый 12.10.2015, 12:29   #2
HelloWold
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

Решил задачу. Есть прирост в скорости работы
HelloWold вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление дублей timon132009 Помощь студентам 1 01.05.2012 14:07
Поиск дублей и суммирование Dicata Microsoft Office Excel 3 16.01.2012 12:29
удаление дублей Bape}l{ka Microsoft Office Excel 7 01.07.2011 11:50
поиск дублей в строке Bape}l{ka Microsoft Office Excel 12 10.06.2011 09:24
Удаление дублей 777grabber PHP 4 11.11.2009 17:21