![]() |
|
|
![]()
|
|
| Denny |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.12.2005 Где: Тверская обл. Репутация: нет Всего: нет |
Интересная задача, ГОРОДА
Допустим есть город САРАТОВ, название заканчивается на букву В, значит требуется назвать другой город, у которого в названии первая буква В, ну и далее по аналогии (думаю все помнят эту детскую игру). Название не может начинаться с твёрдого знака!!! в этом случае название начинается с предпоследней буквы. Повторять названия НЕЛЬЗЯ! Надо написать программу или хотя бы алгоритм, которая из TXT файла читала названия городов и постоила цепочку максимальной длинны и запишет её в новый файл. |
|||
|
||||
| Temp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 577 Регистрация: 12.1.2003 Репутация: нет Всего: -3 |
а в чём собственно вопрос ?
-------------------- <удалено администрацией> |
|||
|
||||
| Denny |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.12.2005 Где: Тверская обл. Репутация: нет Всего: нет |
Помогите алгоритм составить, а может и решение подскажите. А то торможу я. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Вот тебе и алгоритм. |
|||
|
||||
| Diesel Draft |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
1.Береш первый город
2виводим назву города 3.Узнаем какая последняя буква 4. Ищем в списке город з таким названием 5. стираем город з списка (штобы не повторялса) 6. виводим назву города 7. если список не пуст переходим на 3 |
|||
|
||||
| lovermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 28.12.2004 Где: Прага Репутация: нет Всего: 8 |
Вопрос же ясно задан - построить самую длинную цепочку. А вы тут про что?...
|
|||
|
||||
| Denny |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.12.2005 Где: Тверская обл. Репутация: нет Всего: нет |
Вот Именно МАКСИМАЛЬНОЙ ДЛИНЫ.
Здесь то я и сел в лужу. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Делаем массив городов, сортируем по алфавитному порядку.
Начинаем с какой-то буквы. Выбираем город на эту букву (первый который попадается). Записываем его в строчку, удаляем из массива, берем его последнюю букву и опять ищем в массиве слово. Можно сделать как фичу, что если есть несколько городов на одну букву, то мы стараемся из них выбрать тот, последняя буква которого доаст продлжение уепочки, т.е. на нее будет начинаться какое-то слово. |
|||
|
||||
| Temp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 577 Регистрация: 12.1.2003 Репутация: нет Всего: -3 |
такого алгаритма наверное нет, только перебором,
хотя учитывая кол-во слов в базе это жулкий цикл. или перебор включать когда цепочка составленна и слова остались, вернуться назад, попытаться их вставить туда и продолжить перебор. -------------------- <удалено администрацией> |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Не совсем. Перебор для строк можно сократить, к примеру, поиск делать методом половинного деления. Если очень много городов, то через внешний массив с индексами для поиска. |
|||
|
||||
| Temp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 577 Регистрация: 12.1.2003 Репутация: нет Всего: -3 |
это как? Можно например сперва составить цепочку с именами начинающемися на "неудобные" буквы (Ц, Ч, Ф) сложность будет именно их пристроить, а остолькое уже проще приложить. -------------------- <удалено администрацией> |
|||
|
||||
| Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Сам метод половинного деления знаешь? Только тут со строками работаешь.
Не, не катит. |
||||
|
|||||
| Diesel Draft |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
Есть алгоритм поло-перебор: когда создаетса дерева з возможных вареантов.
увеличеваетса скорость но и увеличуетса память |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
хм... интересно.. я наверно тупой, глубоко мыслить не умею, но может менять города для которых низя найти сл. город? так по идее должан получица самая длинная...
например: саратов + вологда + архангельск + киев + вильнюс -> нет на "с" саратов + вологда + архангельск + киев + владимир + рим -> нет на "м" саратов + вологда + архангельск + киев + владимир + рим + москва -> нет на "а" саратов + вологда + архангельск + киев + владимир + рим -> нет на "а" кроме "москва" саратов + вологда + архангельск + киев + владимир -> нет на "р" кроме "рим" саратов + вологда + архангельск + киев- > нет на "в" кроме "владимир" саратов + вологда + архангельск + курск + кёльн + новосибирск + суздаль + львов + владимир + рим + москва и т.д. и сохранять все таблицы а потом брать самую длинную или бред? Это сообщение отредактировал(а) Alx - 19.12.2005, 01:40 |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Да, это самый верный способ, но таких комбинаций получится ужас какой. Ну может получиться в 70% случаев, а следовательно вариант отпадает, т.к. ПХП просто упадет. |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Mal Hack
имхо на скорость в данном случае вообще рассчитывать не приходится... ну можно просто когда кончается цепочка, записывать её, а потом следующую сравнивать с ней на предмет длины... если длинее, заменять, нет, идти дальше. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Можно. Тут уже все-таки надо более детально смотреть ресурсы и пробовать.
|
|||
|
||||
| Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: нет Всего: 71 |
топорно конечно сделал (ну так ведь не мастер
сделал с базой данных и пошагово, т.к. самому было интересно -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
а теорию графов никто не учил ... это же еб .... шся перебором это делать
|
|||
|
||||
| Diesel Draft |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
можно попробувать создать граф, апотом искать самый походящый путь.
мне кажетсаето самый подходящый вареант |
|||
|
||||
| Denny |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 9.12.2005 Где: Тверская обл. Репутация: нет Всего: нет |
Я не учил... Поподробнее можно. |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: нет Всего: 71 |
и меня заодно научите
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Diesel Draft |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
Вы знаете што такое дерево даных? Если знаете то дерев мает одного предка и много нащадков. А граф может иметь много предков и много нащадков.
Как паутина |
|||
|
||||
| Alx |
|
|||
|
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
як можливо маiть богато предков?
зы - Diesel Draft, пишите по-русски!!! |
|||
|
||||
| Хоббит |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Это самый правильный вариант, для решения таких задач. Тем более сведя графы к матрицам инцидентности или смежности вся задача превратится в простые математические вычисления (сложения вычитания матриц и.т.д.) .... Хотя по сути задача не легкая. |
|||
|
||||
| error |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 3.1.2006 Репутация: нет Всего: нет |
Самое простое, что приходит в голову - сделать по алгоритму фронта волны.
По Дейкстре, увы, не найдешь, так как классический Дейкстра - для бесконтурных графов. По-моему, сложность в любом случае будет n*4. Но это все же лучше, чем n! (перебор). Но вообще задачу обалдеешь делать. Это сообщение отредактировал(а) error - 4.1.2006, 00:03 |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
А это на рюкзак не похоже? |
|||
|
||||
| mvdr |
|
|||
|
физик ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1349 Регистрация: 31.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 42 |
А если для каждой буквы завести свой массив, и потом брать любое слово, смотреть его последнюю букву, и затем брать слово начинающееся на нее из того массива где слов больше.
Не факт что будет длинная цепочка, ... Еще надо продумать гаморрой с той же Астраханью (что брать не последнюю, а предпоследнюю). -------------------- Появляюсь редко, но часто метко Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: 1 Всего: 56 |
Можно свести задачу к следующей.
Есть n слов. Создадим множество {b[i], e[i]}, отображением из множества введеных слов по следующему правилу: b[i] - первая буква i-того слова e[i] - первая с конца буква i-того слова, с которой может начинаться другое слово (т.е. не 'ъ', 'ы' и т.п.) пусть A - объединение множеств {b[i]} и {e[i]} m-размерность A Создадим матрицу B размерности m на m такую, что B[u, v] = {набор целых чисел из интервала [1..n] таких, что для любого числа x из этого набора b[x] = A[u], e[x]=A[v]} Полученная матрица описывает орграф. Таким образом решением задачи будет максимальный эйлеров контур в этом орграфе + (возможно) две дуги. Одна входящая в эйлеров контур (начальное слово из условия задачи) и одна исходящая (конечное слово). Естественно, что таких дополнительных дуг может и не быть или может быть одна. Нахождение такого эйлерова контура гораздо менее трудоемкая операция чем полный перебор. |
|||
|
||||
| poor_yorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 12.1.2005 Где: Общаги г. Киева Репутация: 3 Всего: 8 |
Емхмо, проще сделать так.
Завести матрицу mat['А'..'Я','А'..'Я']. И заполнить ее таким образом Например элементу mat['A','H'], будем ставить количество городов, которые начинаются на А заканчиваются на Н. А потом с ней работать, что будет побыстрее. Кстати это и будет матрица смежности ориентированого графа, у которого вершинам соответсвуют буквы русского алфавита. И здесь можно попробговать алгоритм Эйлера... Приблизительный ответ это даст. --------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай... |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: 1 Всего: 56 |
poor_yorik, только все-таки надо брать не mat['А'..'Я','А'..'Я'], а как я предложил (см. выше) т.к. у меня матрица меньше получится. А что в элементах хранить - не суть важно (из двух этих вариантов). Либо там храняться дуги с номерами (номер слова) - мой вариант, либо там хранится количество дуг (твой вариант), но в твоем варианте придется востанавливать последовательность слов по найденным дугам - это выйдет немного дольше
|
|||
|
||||
| Bratan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 6.1.2006 Репутация: нет Всего: нет |
Представте себе города на карте. Рассмотрим все пары городов. Если последняя буква названия первого города совпадает с первой буквой названия второго города, то проложим между ними дорогу с односторонним движением. Таким образом на карте возникнет сеть дорог с односторонним движением (ориентированный граф).
В такой интерпретации задача превращается в классическую задачу о комивояжере. То есть человеку надо посетить возможно большое количество городов и не побывав дважды ни в одном из них. Задача вообще говоря NP-полна. Но метод ветвей и границ решает ее довольно быстро.(хотя и не полиномиально). Метод ветвей и границ конкретно для этой задачи преращается в рекурсивный обход ориентированного графа в глубину. |
|||
|
||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
это задача класса P Space поэтому полный перебор
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |