Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Trie или Array массивы?

Статус пользователя Nixon
сообщение 5.3.2014, 9:35
Сообщение #1


Стаж: 13 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Хотел узнать, что лучше использовать для работы с файлами(хранение, обработка и пр). Trie массив или же Array?
Чем они друг от друга отличаются и какой лучше использовать?
Спасибо psych.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя csnet
сообщение 5.3.2014, 9:53
Сообщение #2
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

Trie например хорошо в бан системах, когда по ключу находится нужный id забаненного игрока, хотя я сам пока не дошел до их использования

для работы с файлами обычные get_configsdir / открой file.inc почитай функции для работы с файлами

Отредактировал: csnet, - 5.3.2014, 9:54


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 5.3.2014, 10:00
Сообщение #3


Стаж: 13 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Цитата(csnet @ 5.3.2014, 11:53) *
Trie например хорошо в бан системах, когда по ключу находится нужный id забаненного игрока, хотя я сам пока не дошел до их использования

для работы с файлами обычные get_configsdir / открой file.inc почитай функции для работы с файлами

На счет file.inc я знаю) Пока меня интересуют Trie и Array массивы. Я что хочу узнать, можно ли один из массивов всегда использовать, в любом случае? При том же бане или при сохранение денег(жизней) и пр. информации игрока.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 5.3.2014, 10:11
Сообщение #4


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Nixon,
на amx-x.ru была хорошая статья


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 5.3.2014, 12:39
Сообщение #5


Стаж: 13 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Цитата(AndrewZ @ 5.3.2014, 12:11) *
Nixon,
на amx-x.ru была хорошая статья

Я знаю, она есть. Я же спрашиваю чем они отличаются и что лучше) В статье я этого не увидел, поэтому спрашиваю здесь.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DraconKCH
сообщение 5.3.2014, 20:19
Сообщение #6
Стаж: 17 лет

Сообщений: 156
Благодарностей: 74
Полезность: 373

Цитата(Nixon @ 5.3.2014, 16:39) *
Я знаю, она есть. Я же спрашиваю чем они отличаются и что лучше) В статье я этого не увидел, поэтому спрашиваю здесь.

Trie - Ассоциативный массив, который построен на хранении данных вида ключ-значение, если твои данные можно выстроить в таком плане, то лучше использовать его, так как поиск пройдёт быстрее
Array - Динамический массив, тут данные строятся на ячейках в массиве, записать можно больше информации, но и искать придётся, считывая всю информацию. Получается что array универсальнее, если не важна скорость работы.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 5.3.2014, 20:49
Сообщение #7
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(DraconKCH @ 5.3.2014, 22:19) *
Array - Динамический массив

Trie - тоже динамический массив ;)

Цитата(DraconKCH @ 5.3.2014, 22:19) *
искать придётся, считывая всю информацию.

Чтобы этого не делать, совместно с Array используется по меньшей мере 1 Trie, хранящий связи 'ключевое поле - позиция в Array'.

Цитата(DraconKCH @ 5.3.2014, 22:19) *
Получается что array универсальнее, если не важна скорость работы.

Вряд ли это верное утверждение.

Цитата(Nixon @ 5.3.2014, 11:35) *
Хотел узнать, что лучше использовать для работы с файлами(хранение, обработка и пр). Trie массив или же Array?

Работа с файлами не имеет никакого отношения к массивам.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DraconKCH
сообщение 5.3.2014, 21:54
Сообщение #8
Стаж: 17 лет

Сообщений: 156
Благодарностей: 74
Полезность: 373

Цитата(Safety1st @ 6.3.2014, 0:49) *
Trie- тоже динамический массив ;)

Разве я сказал что он НЕ динамический? Его отличие - это ассоциативность

Цитата(Safety1st @ 6.3.2014, 0:49) *
Чтобы этого не делать, совместно с Array используется по меньшей мере 1 Trie, хранящий связи 'ключевое поле - позиция в Array'.

Можно, но вопрос был поставлен в другом, хотя интересен был бы пример.

Цитата(Safety1st @ 6.3.2014, 0:49) *
Вряд ли это верное утверждение.

Если взять одну и ту же информацию и записать в разные массивы, то trie будет выгоднее, но не всегда можно обойтись только trie массивом, а в array можно записать всё. Или я не прав?

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 6.3.2014, 1:19
Сообщение #9
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(DraconKCH @ 5.3.2014, 23:54) *
Разве я сказал что он НЕ динамический? Его отличие - это ассоциативность

По смыслу именно так получается) Поэтому я специально подчеркнул, что и Array, и Trie - динамические массивы.

Цитата(DraconKCH @ 5.3.2014, 23:54) *
Можно, но вопрос был поставлен в другом, хотя интересен был бы пример.

Ну как в другом, когда Array без Trie мне пока видеть доводилось только в дефолтном Players Menu? ) Но он не в счёт, ибо слишком простой случай.
Простенький пример, кусок из BanCfg
Код:
SomeFunction() {
if( TrieKeyExists( gtBannedIpsPos, szPlayerIP ) ) {
TrieGetCell( gtBannedIpsPos, szPlayerIP, iArrayPos )
ArrayGetArray( gaBannedIps, iArrayPos, iData )
}

// ...

if( iBanFlags & BANNED_IP ) {
iData[LAST_SEEN] = iSysTime
ArraySetArray( gaBannedIps, iArrayPos, iData )
}

// ...
}

DeleteBannedIP( const szPlayerIP[] ) {
new iArrayPos

TrieGetCell( gtBannedIpsPos, szPlayerIP, iArrayPos )
ArrayDeleteItem( gaBannedIps, iArrayPos )
TrieDeleteKey( gtBannedIpsPos, szPlayerIP )
giRecords--
// ...
}

Цитата(DraconKCH @ 5.3.2014, 23:54) *
Если взять одну и ту же информацию и записать в разные массивы, то trie будет выгоднее, но не всегда можно обойтись только trie массивом, а в array можно записать всё. Или я не прав?

Я думаю, правильно сравнивать только с учётом конкретной задачи.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: