Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интересная логическая задача, Задачка на 40 баллов ... 
:(
    Опции темы
Alx
Дата 19.12.2005, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Mal Hack
имхо на скорость в данном случае вообще рассчитывать не приходится...
ну можно просто когда кончается цепочка, записывать её, а потом следующую сравнивать с ней на предмет длины... если длинее, заменять, нет, идти дальше.


--------------------
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 19.12.2005, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 1
Всего: 261



Можно. Тут уже все-таки надо более детально смотреть ресурсы и пробовать.
PM ICQ   Вверх
Gold Dragon
Дата 19.12.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



топорно конечно сделал (ну так ведь не мастер smile ), но просто хотелось попробывать
Код

<?php
mysql_connect('localhost', 'root', '') or die("Ошибка соединения");
mysql_select_db('chat');

if(!isset($_GET[sity])){
    mysql_query("UPDATE `test` SET `index`='0' WHERE `index`=1");
    $sity = "саратов";
    $mes .=$sity.' -> ';
    $f_sity = f_sity($sity);
    $mes .= $f_sity[name];
    $mes .= ($f_sity[index]==0)? "<br><br><a href='index.php'>Сначала</a>" : "<br><br><a href='index.php?sity=".$f_sity[name]."&index=".$f_sity[index]."'>Дальше</a>";
}else{
    $sity = $_GET[sity];
    $mes .=$sity.' -> ';
    $f_sity = f_sity($sity);
    $mes .= $f_sity[name];
    $mes .= ($f_sity[index]==0)? "<br><br><a href='index.php'>Сначала</a>" : "<br><br><a href='index.php?sity=".$f_sity[name]."&index=".$f_sity[index]."'>Дальше</a>";
}

echo $mes;

function f_sity($sity){
    $alfa = substr($sity, -1);
    if(($alfa=="ь") or ($alfa=="Ь")){$alfa = substr($sity,-2,1);}
    $z = "SELECT * FROM `test` WHERE `index`=0 AND LEFT(sity,1)='".$alfa."' LIMIT 1";
    $r = mysql_query($z);
    if (mysql_num_rows($r)>0){
        $f = mysql_fetch_array($r);
        $f_sity[name] = $f[sity];
        $f_sity[index] = 1;
        mysql_query("UPDATE `test` SET `index` = '1' WHERE `sity`='".$f_sity[name]."'") ;
    }else{
        $f_sity[name] = 'Городов на букву &laquo;<b>'.$alfa.'</b>&raquo; больше нет';
        $f_sity[index] = 0;
    }
    return $f_sity;
}

?>

Код

CREATE TABLE `test` (
  `sity` varchar(200) NOT NULL default '',
  `index` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`sity`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

INSERT INTO `test` VALUES ('саратов', 0);
INSERT INTO `test` VALUES ('вологда', 0);
INSERT INTO `test` VALUES ('архангельск', 0);
INSERT INTO `test` VALUES ('курск', 0);
INSERT INTO `test` VALUES ('кёльн', 0);
INSERT INTO `test` VALUES ('новосибирск', 0);
INSERT INTO `test` VALUES ('суздаль', 0);
INSERT INTO `test` VALUES ('владимир', 0);
INSERT INTO `test` VALUES ('москва', 0);
INSERT INTO `test` VALUES ('рим', 0);


сделал с базой данных и пошагово, т.к. самому было интересно smile, но перевести это всё для записи в TXT файл и за один цикл думаю легко


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Хоббит
Дата 19.12.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



а теорию графов никто не учил ... это же еб .... шся перебором это делать
PM MAIL   Вверх
Diesel Draft
Дата 20.12.2005, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



можно попробувать создать граф, апотом искать самый походящый путь.
мне кажетсаето самый подходящый вареант


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Denny
Дата 20.12.2005, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.12.2005
Где: Тверская обл.

Репутация: нет
Всего: нет



Цитата

а теорию графов никто не учил


Я не учил... Поподробнее можно.
PM MAIL   Вверх
Gold Dragon
Дата 20.12.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



и меня заодно научите smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Diesel Draft
Дата 20.12.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: -1
Всего: 5



Вы знаете што такое дерево даных? Если знаете то дерев мает одного предка и много нащадков. А граф может иметь много предков и много нащадков.

Как паутина


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Alx
Дата 20.12.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



як можливо маiть богато предков?


зы - Diesel Draft, пишите по-русски!!!


--------------------
PM MAIL WWW ICQ   Вверх
Хоббит
Дата 21.12.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



Цитата(Diesel @ 20.12.2005, 00:17)
можно попробувать создать граф, апотом искать самый походящый путь.
мне кажетсаето самый подходящый вареант

Это самый правильный вариант, для решения таких задач. Тем более сведя графы к матрицам инцидентности или смежности вся задача превратится в простые математические вычисления (сложения вычитания матриц и.т.д.) ....
Хотя по сути задача не легкая.
PM MAIL   Вверх
error
Дата 3.1.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 3.1.2006

Репутация: нет
Всего: нет



Самое простое, что приходит в голову - сделать по алгоритму фронта волны.
По Дейкстре, увы, не найдешь, так как классический Дейкстра - для бесконтурных графов.
По-моему, сложность в любом случае будет n*4. Но это все же лучше, чем n! (перебор).
Но вообще задачу обалдеешь делать.

Это сообщение отредактировал(а) error - 4.1.2006, 00:03
PM MAIL   Вверх
sergejzr
Дата 4.1.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Цитата(Temp @ 18.12.2005, 16:45)
такого алгаритма наверное нет, только перебором,
хотя учитывая кол-во слов в базе это жулкий цикл.

А это на рюкзак не похоже?



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
mvdr
Дата 4.1.2006, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



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


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Illuminaty
Дата 4.1.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 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]}
Полученная матрица описывает орграф. Таким образом решением задачи будет максимальный эйлеров контур в этом орграфе + (возможно) две дуги. Одна входящая в эйлеров контур (начальное слово из условия задачи) и одна исходящая (конечное слово). Естественно, что таких дополнительных дуг может и не быть или может быть одна.
Нахождение такого эйлерова контура гораздо менее трудоемкая операция чем полный перебор.
PM MAIL ICQ   Вверх
poor_yorik
Дата 4.1.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: 3
Всего: 8



Емхмо, проще сделать так.
Завести матрицу mat['А'..'Я','А'..'Я']. И заполнить ее таким образом
Например элементу mat['A','H'], будем ставить количество городов, которые начинаются на А заканчиваются на Н. А потом с ней работать, что будет побыстрее.
Кстати это и будет матрица смежности ориентированого графа, у которого вершинам соответсвуют буквы русского алфавита. И здесь можно попробговать алгоритм Эйлера... Приблизительный ответ это даст. smile
--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.