Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 26 Май, 2012, 02:24:55

Страниц: [1] 2 3 4
Печать
Автор Тема: Поиск, почти как по дереву =((  (Прочитано 5102 раз)
0 Пользователей и 1 Гость смотрят эту тему.
krasun    ↓ 
29 Октябрь, 2009, 09:47:11
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

Делаю класс - друг. Друг может подружится с другими друзьями. Дружба взаимная, если я дружу Васю с Петей, то и Петя дружит с Васей. Так у каждого друга, получается, что-то вроде списка друзей.  
 
Задача сделать поиск друга напрямую и косвенно. Напрямую, я сделал, это легко и понятно, нужно просто ответить дружит ли Вася напрямую с Петей. А вот косвенно, это значит через кого-то. Тут я не много уже задумался. Может подкинете идеи или кто-то уже решал подобное.
Java

namespace Friendship
{
    class Friend
    {  
        /* Имя */
        private String Name;
 
        /* Список друзей */
        private ArrayList Relations;
 
        /*
         *
         * Устанавливает начальное значение имени
         * и выделяет память под Relations.
         *
         * */

        public Friend(String name)
        {
            this.SetName(name);
            this.Relations = new ArrayList();
        }
 
        /*
         *
         * Метод создает взаимную связь между
         * текущим и указанным другом.
         *
         * */

        public void ConnectTo(Friend f)
        {
            this.Relations.Add(f);
            f.Relations.Add(this);
        }
 
        /*
         *
         * Метод разрывает связь между текущим и
         * указанным другом.
         *
         * */

        public void DisconnectWith(Friend f)
        {
            this.Relations.Remove(f);
            f.Relations.Remove(this);
        }
 
        /*
         *
         * Метод поиска друга на прямую. Отвечает на вопрос: "Знаком
         * ли текущий друг с указанным на прямую?"
         *
         * */

        public bool IsDirectConnectWith(Friend f)
        {
            return this.Relations.Contains(f);
        }
 
        /*
         *
         * Метод поиска косвенных связей.
         * Сообщает связан ли текущий друг с указанным,
         * любыми другими связями.
         *
         * */

        public bool IsAccrossConnectWith(Friend f)
        {
            // если связан на прямую, то дальше
            // искать нет смысла
            if (this.IsDirectConnectWith(f))
            {
                return true;
            }
        }
 
        /*
         *  
         * Метод, который устанавливает имя.
         *
         * */

        public void SetName(String name)
        {
            this.Name = name;
        }
 
        /*
         *
         * Метод возвращает имя.
         *
         * */

        public String GetName()
        {
            return this.Name;
        }
 
    }
}
 

Подсветку сделал через java
« Последнее редактирование: 29 Октябрь, 2009, 09:46:09 от krasun » Записан
krasun    ↓ 
29 Октябрь, 2009, 04:54:17 , спустя
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

Может есть где литература?
Записан
phpdude    ↓ 
29 Октябрь, 2009, 04:56:02 , спустя 1 минуту 45 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

/*
         *  
         * Метод, который устанавливает имя.
         *
         * */
        public void SetName(String name)
        {
            this.Name = name;
        }

почитай про сеттеры и геттеры в .нет, ты написал в стиле пхп.
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
krasun    ↓ 
29 Октябрь, 2009, 04:58:32 , спустя 2 минуты 30 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97


/*
         *  
         * Метод, который устанавливает имя.
         *
         * */
        public void SetName(String name)
        {
            this.Name = name;
        }

почитай про сеттеры и геттеры в .нет, ты написал в стиле пхп.

phpdude, я знаю, что такое геттеры и сеттеры в .NET, сейчас мне просто удобно явно указывать.
 
Мне бы с поиском что-то придумать, задача интересная.  
Спустя 56 секунд добавил
Я просто не знаю как такой тип поиска называется, это же не дерево, это какой-то граф выходит с кучей перемешанных связей.
Записан
CTAPbIu_MABP    ↓ 
29 Октябрь, 2009, 07:03:53 , спустя 2 часа 5 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

почему код не подкрашен? ктото с классами снрова мудрил?
Спустя 1 минуту 35 секунд добавил
krasun, почитай про класс LinkedList он по идеи должен быть и в c# может немного иначе называется
Записан

java.lang.OutOfMemoryError
phpdude    ↓ 
29 Октябрь, 2009, 07:06:12 , спустя 2 минуты 19 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20793
Сила слова: 1.66

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

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
krasun    ↓ 
29 Октябрь, 2009, 07:13:15 , спустя 7 минут 3 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

Тоже думаю так сделать, пока что не могу придумать какой-то алгоритм
Спустя 4 минуты добавил
CTAPbIu_MABP, а у меня разве связной список? У меня получается один из узлов может иметь множество ссылок на другие узлы
Спустя 1 минуту 29 секунд добавил
но идею понял, поищу что нибудь в этом направлении, на крайний случай, все в кучу и перебор
Записан
CTAPbIu_MABP    ↓ 
29 Октябрь, 2009, 07:23:18 , спустя 10 минут 3 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

krasun, вообще это две(три) таблицы со связями многие ко многим но если тебе надо без базы то наверное линкедлист это лучшее что я могу предложить
Записан

java.lang.OutOfMemoryError
krasun    ↓ 
29 Октябрь, 2009, 09:43:49 , спустя 2 часа 20 минут 31 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

CTAPbIu_MABP,  мне без базы. Я именно хочу понять алгоритм. Я такое видел в соц. сетях: Вы дружите с Антоном через Петра, а Петр через Ивана. И так полный путь.
Я рисовал сначал граф, но в их теории я не силен. Решение примерно прикинул. Ходить по этим узлам, запоминать какой прошел, и так далее... Еще посмотрю связанные списки, как ты и сказал, спасибо.
Записан
Mr.Pihto    ↓ 
02 Ноябрь, 2009, 08:45:28 , спустя 3 дня 23 часа 1 минуту 39 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

Код: Java
а код вроде C )
Записан
krasun    ↓ 
02 Ноябрь, 2009, 08:53:21 , спустя 7 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97


Код: Java
а код вроде C )
не, не C, это C#. Просто C#, не подсвечивался.
Записан
Mr.Pihto    ↓ 
02 Ноябрь, 2009, 09:47:41 , спустя 54 минуты 20 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

ну я имел ввиду С#.. хотя С# и Java близки
Спустя 15 секунд добавил
по синтаксису
Записан
krasun    ↓ 
05 Ноябрь, 2009, 10:00:59 , спустя 3 дня 13 минут 18 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

АХУЕТЬ, я решил это. Теперь, я смогу ответить на вопрос.
 

 
Знаком ли Вася с Федором.  
Спустя 25 секунд добавил
Единственное, что сейчас я нахожу не кратчайший путь правда
Спустя 34 секунды добавил
Загвоздка была, в том что это не дерево и здесь могут быть циклические связи.
« Последнее редактирование: 05 Ноябрь, 2009, 10:00:59 от krasun » Записан
adw0rd    ↓ 
06 Ноябрь, 2009, 12:10:10 , спустя 2 часа 9 минут 11 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67

Давай алгоритмы в студию)
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
krasun    ↓ 
06 Ноябрь, 2009, 12:51:42 , спустя 41 минуту 32 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1379
Сила слова: 2.97

Обязательно, только чуть позже, нужно код привести в порядок, доделать пару методов и описать ))
Записан
Страниц: [1] 2 3 4
Печать
 

Перейти в: