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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2008, 17:08   #1
SBerT
 
Регистрация: 14.12.2008
Сообщений: 3
По умолчанию Нужна помощь со строками на C++

Задача: Найти в строке самое маленькое по количеству слов множество, в словах которого содержатся все буквы алфавита.

Создавать строку и вычленять слова в кучу, создавая динамический массив указателей на них, умею. Может ли кто-нибудь подсказать сам алгоритм решения задачи?
SBerT вне форума Ответить с цитированием
Старый 14.12.2008, 20:47   #2
SBerT
 
Регистрация: 14.12.2008
Сообщений: 3
По умолчанию

По идее тут должен быть стандартизированный алгоритм? Я пытаюсь найти его в разных источниках, но пока безрезультатно. Может кто-то уже сталкивался?
SBerT вне форума Ответить с цитированием
Старый 15.12.2008, 07:27   #3
SBerT
 
Регистрация: 14.12.2008
Сообщений: 3
По умолчанию

Пожалуйста, откликнитесь, кто знает. Очень нужно к среде.
SBerT вне форума Ответить с цитированием
Старый 15.12.2008, 08:36   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

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

Далее цикл
for (i=a[x]; x < n; x++) //Где a[х] это элемент масива содержащего первый символ текущего слова (точнее номер его ячейки).
for (j=i;j<n;j++)
{

switch(text[i])
{case 'a'
{alfavit[0] =1; break}
case 'b'
{alfavit[1] =1; break}

case 'c'
{alfavit[2] =1; break}// и так далее...
}

for (z=0; z<23; z++)
{if (alfavit[z]!= -)
{buki ++;}
}


}

Хм.. кажется я чего-то пропустил... надо еще подумать.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 15.12.2008, 10:06   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Как вариант посмотреть в сторону теории множеств. В С++ правда я не помню есть ли они вообще и если есть, то в каком виде, но идея в следующем:
- Вырезаем из строки первое слово
- Пробегаем по нему и заполняем множество имеющихся в нём букв
- Добавляем в список (или в чём там будете хранить) слов
- Вырезаем второе слово
- Определяем для него множество букв
- проверяем, есть ли у нас уже слово, которое имеет такое же или большее множество букв (т.е. кажется так по теории будет: Б - А = (пустое множество), шде Б - множество для второго слова, А - для первого). если есть, то не добавлять слово в общее хранилище, т.к. есть уже более подходящий аналог. Если же наоборот уже есть "худшее" слово, т.е. (А - Б = () и Б - А != ()), то удаляем из списка то слово и заносим новое.
// Пробегаем так по всем словам

Поиск оптимального множества слов примерно такой будет:
берём множество, в котором заполнены все буквы и проверяем все комбинации слов. из этого полного множества вычитаем множество конкретного слова. В итоге такими вычитаниями нужно получить пустое множество. Но тут сложность алгоритма растет по экспоненте наверно и на 10 словах "весело" будет.
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
срочно нужна помощь, со строками Поскаль Dimon1231 Помощь студентам 10 24.05.2008 22:58
Нужна помощь LeoN Общие вопросы Delphi 12 18.03.2007 07:58
Нужна помощь! mEka Помощь студентам 2 04.03.2007 01:39
нужна помощь Селезнёв Microsoft Office Excel 1 02.03.2007 03:19
нужна помощь по работе с строками файлов... Ruffian Общие вопросы Delphi 9 15.11.2006 16:05