Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бесконечное деление пирамиды 
:(
    Опции темы
Чучмек
Дата 5.8.2012, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Восстанавливаем часть массива users, соответствующую выбранной пирамиде
Код

 $mColInd=array();
 $ColCount=0;
 while ($ColName=@mysql_field_name($result,$ColCount))
  {
  $mColInd[$ColName]=$ColCount++;  
  }
 $users=array();
 while ($mas=mysql_fetch_row($result))               
    {
    $users[$mColInd['ind']]=$users[$mColInd['user_id']];
    }

Получим, например для пирамиды с индексом вершины 4  
Код

Array
(
    [4]  => xxx
    [9]  => xxx
    [10] => xxx
    [19] => xxx
    [20] => xxx
    ...
    ...
)

Далее, если уж так необходимо
Код

$pyramid=array();
reset($users);
$I=key($users);
for ($n=0;$n<$ncount;$n++)
 {
 $pyramid[$n]=array();
 $lcount=1 << $n;
 $i0=($I+1)* $lcount-1;
 for($il=0;$il<$lcount;$il++)
   {
   if (isset($users[$i0+$il]))
       {
       $pyramid[$n][$il]=$users[$i0+$il];
       }
   }
 }  
 

Это сообщение отредактировал(а) Чучмек - 5.8.2012, 17:31


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Fortop
Дата 5.8.2012, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Чучмек @  5.8.2012,  09:46 Найти цитируемый пост)
Если из него  заполненные  не удалять

А как вы при удалении собираетесь просматривать историю?

А если не удалять, то в чем разница-то?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
nepster
Дата 6.8.2012, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще момент если есть скажем пользователи в 4 уровне 


Array
(
    [1]  => xxx
    [2]  => xxx
    [3] => xxx
    [4] => xxx
    [5] => xxx
    [6] => xxx
    [7] => пусто для новых
    [8] =>  пусто для новых
)

админ может деактивировать юзера скажем 4 и будет 


Array
(
    [1]  => xxx
    [2]  => xxx
    [3] => xxx
    [4] => пусто для новых
    [5] => xxx
    [6] => xxx
    [7] => пусто для новых
    [8] =>  пусто для новых
)


но по заданию нужно в любом случае поместить пустые ячейки в конец. 

Array
(
    [1]  => xxx
    [2]  => xxx
    [3] => xxx
    [4] => xxx
    [5] => xxx
    [6] => пусто для новых
    [7] => пусто для новых
    [8] =>  пусто для новых
)


тоесть порядковые номера немного собьются и походу в любом случае придется перезаписывать пол базы. 




PM MAIL   Вверх
Fortop
Дата 6.8.2012, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nepster @  6.8.2012,  01:21 Найти цитируемый пост)
но по заданию нужно в любом случае поместить пустые ячейки в конец. 

В конец чего?

Т.е. подписанный под одного человека пользователь резко переместится под другого?
Ну не бред ли?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
baldina
Дата 6.8.2012, 09:23 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nepster @  4.8.2012,  03:21 Найти цитируемый пост)
везде должна быть история

что входит в историю? достаточно ли для истории просто уметь строить набор пирамид в хронологическом порядке?

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

nepster, Чучмек, вы уже написали немало кода (мне не очень понятного концептуально), однако один пытается решить задачу, про которую ТС говорит
Цитата(nepster @  4.8.2012,  14:35 Найти цитируемый пост)
об этом я еще не думал


пока задача не будет поставлена конкретно и полностью, все эти разговоры, куски кода и структуры базы имхо лишены смысла.
пока в некоторых местах разговор о задаче имеет противоречия (например на которые указывал Fortop).
в постановку также надо добавить предполагаемые объемы обрабатываемых данных.
 
PM MAIL   Вверх
Чучмек
Дата 6.8.2012, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(nepster @  6.8.2012,  01:21 Найти цитируемый пост)
 придется перезаписывать пол базы

Придется перезаписывать данные пользователей одной пирамиды

Цитата(Fortop @  5.8.2012,  23:47 Найти цитируемый пост)
А если не удалять, то в чем разница-то? 


Цитата(Чучмек @  5.8.2012,  09:46 Найти цитируемый пост)
count(tops) * 2^n = count(users)

Пускай 6000000 пользователей и 4 уровня в пирамиде.
Есть разница между дополнительным индексированным полем в таблице на 6*10^6 и таблицей из двух полей 4*10^5 ???
 
Цитата(baldina @  6.8.2012,  09:23 Найти цитируемый пост)
пока задача не будет поставлена конкретно и полностью, все эти разговоры, куски кода и структуры базы имхо лишены смысла

+

Это сообщение отредактировал(а) Чучмек - 6.8.2012, 10:59


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
baldina
Дата 6.8.2012, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Чучмек @  6.8.2012,  10:57 Найти цитируемый пост)
Есть разница между дополнительным индексированным полем в таблице на 6*10^6 и таблицей из двух полей 4*10^5 ???

неправильно считаете. разница есть, но кроме памяти (весьма нынче дешевой) есть и другие факторы. 
задачу надо, а не "если бы да кабы"

PM MAIL   Вверх
Fortop
Дата 6.8.2012, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Чучмек @  6.8.2012,  10:57 Найти цитируемый пост)
Пускай 6000000 пользователей и 4 уровня в пирамиде.
Есть разница между дополнительным индексированным полем в таблице на 6*10^6 и таблицей из двух полей 4*10^5 ???

Или я что-то упускаю из виду, или  у вас число топов = N/2 (где N - общее число узлов/пользователей в структуре)

У вас 4 уровня для каждого конкретного топа. Но кто сказал что 2,3,4й уровни не могут быть топами в свою очередь для кого-то другого?

Т.е. для 6000000 пользователей у вас будет 3000000 топов.
Вот и вся ваша экономия.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Чучмек
Дата 6.8.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(Fortop @  6.8.2012,  12:30 Найти цитируемый пост)
Но кто сказал что 2,3,4й уровни не могут быть топами в свою очередь для кого-то другого?


Цитата(Чучмек @  5.8.2012,  09:46 Найти цитируемый пост)
(при условии равномерного заполнения дерева) 


При равномерном(относительно равномерном) заполнении, активные топы(верхушки еще не  заполненных/не разделенных пирамид)будут находится примерно на одном уровне дерева. В двоичном дереве каждый последующий уровень содержит элементов столько же, сколько все предыдущие.
Число уровней в tops будет на n(число уровней в пирамиде) меньше чем число уровней в users
Отсюда для n=4 разница в 16 раз.
Конечно это крайний случай. Другая крайность - всегда заполняется ТОЛЬКО ОДНА из вновь образующихся пирамид. Тогда count(tops)=count(users) - 2^n




Это сообщение отредактировал(а) Чучмек - 6.8.2012, 13:09


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 6.8.2012, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Кроме того в tops можно хранить информацию не имеющую отношения к конкретному пользователю
Время создания/заполнения пирамиды, историю изменения ее состава.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
nepster
Дата 6.8.2012, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



на днях реализую пол задания и все вылажу, для дальнейших дискуссий. Тема интересная =) 

По поводу дерева. тут идет как: 

1 уровень  - это 1 пользователь 
2 уровень -  это 3 пользователя 
3 уровень -  это 9 пользователей 
4 уровень -  это 27 пользователей 

Всего в пирамиде 40 человек. Как только пирамида полностью заполняется, тоесть в ней стоят 40 человек, она делится еще на 3 пирамиды. 
Сама же получает статус 0 и существует только для истории. 


1,2 и 3 уровень они всегда заполнены. На самом первом этапе в самой 1 пирамиде эти 13 человек, как бы спонсоры проекта. Для приглашения существует только 4 уровень. Если 1 пользователь на 1 уровне пригласит кого-то, то приглашенный попадает на 4 уровень, любой  пользователь пирамиды кого-то приглашает, то он попадает на 4 уровень. Тоесть тут нет как бы порядка вложенности и иерархии. Эта иерархия показана только в дизайне, не более. 



PM MAIL   Вверх
baldina
Дата 7.8.2012, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nepster @  6.8.2012,  16:02 Найти цитируемый пост)
Как только пирамида полностью заполняется, тоесть в ней стоят 40 человек, она делится еще на 3 пирамиды. 

кто-то при этом выбывает? кто в какую пирамиду попадает при делении?
PM MAIL   Вверх
nepster
Дата 7.8.2012, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нет, к примеру нумерация ячеек идет по порядку и при делении первая треть попадает в 1 пирамиду, вторая треть во вторую и третья треть в третью пирамиду. 
PM MAIL   Вверх
baldina
Дата 7.8.2012, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



и при этом нужна история, кто в какой когда был?
PM MAIL   Вверх
nepster
Дата 7.8.2012, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



все верно
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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