
Sergey
27.05.2018
14:34:34
Понятно, спасибо
(спойлер: есть несколько вариантов ring buffer, один из которых похож на то, что я предложил выше; второй на том, что у текущего элемента есть указатель на следующий — т.е. это linked list)

Alexandr
27.05.2018
14:35:03
видимо, нет

Roman
27.05.2018
14:35:51

Google

Sergey
27.05.2018
14:36:21
я не говорил, что он нужен в данном случае.
linked list позволяет проверять значение после перехода, а не до
в случае, если это ring buffer, в оптимизированном коде проверка не будет происходить в принципе

Zver
27.05.2018
16:43:39
Значит ее там нет. Или не то там.

yuriy
27.05.2018
17:19:32

Subbotin
27.05.2018
17:23:01
эээ. ну понятно что итерация по мапу медленее чем итерация по массиву.
ну типа есть три варианта:
1. поиск в массиве перебором
2. поиск в мапе перебором значений
3. поиск в мапе через обращения по ключу
как мы недавно выяснилили первое быстрее, чем третье на малом количестве элементов. интересно как к этому относится второе

Dmitry
27.05.2018
20:03:26

Subbotin
27.05.2018
20:05:15
ээээ?
речь о поиске какого-то одного значения в мапе/эррэе

Dmitry
27.05.2018
20:05:51
ээээ?
ну как вы собрались искать по ключу не зная ключа ?

Subbotin
27.05.2018
20:07:34
ну допустим есть список валидных интов штук 10-20. тебе приходит новый инт и надо проверить есть ли он в списке валидных.
я думаю стоит подняться в треде на исходные вопросы чтобы понять о чем вообще речь идёт

Dmitry
27.05.2018
20:08:19
стоп, ваш инт что вы хотите проверить - это ключ или значение ?

Google

Dmitry
27.05.2018
20:09:48

Subbotin
27.05.2018
20:11:25
а. ну конкретно в моём случае у меня есть структура c атрибутом ID int64 и можно построить мапу, использовав для ключа этот айди, но ссылающийся на структуру.

Dmitry
27.05.2018
20:11:33
в первом ты проходишь по всем элементам, во втором ты находишь хэш от ключа и обращаешься к конкретной ячейке массива хешей, и если колизий немного то получение кнкретного значения пренебрежительно мало

Subbotin
27.05.2018
20:12:12

Dmitry
27.05.2018
20:12:27

Subbotin
27.05.2018
20:17:29
спасибо - у меня нет проблем с O-нотацией.

Dmitry
27.05.2018
20:17:37
а на малых значения иногда даже O(n^2) бывает быстрее O(1)
ну если нет проблем с О нотацией тогда должны понимать что никто не тестирует быстроту на малом числе значений

Subbotin
27.05.2018
20:20:24
а теперь подумайте минуту и сообразите в каких случаях есть смысл тестировать производительность при малом n
какая альтернатива 1 поиску в массиве из 10000 элементов? (толще подсказывать не буду)

Dmitry
27.05.2018
20:34:54

Subbotin
27.05.2018
20:36:32
тогда есть смысл мерять скорость выполнения для малых n

Dmitry
27.05.2018
20:40:06
окей согласен. но в таких случаях нужно непосредлственное тестирование
берете перебираете все варианты алгоритмов и оставляете тот который быстрее
потому как скорость различных имплементаций одного и тогоже алгоритма могут в разы отличаться при таких условиях

Subbotin
27.05.2018
20:42:58
ну у нас тут вроде одна имплементаци на го.

Dmitry
27.05.2018
20:46:43
никто не мешает использовать свою имплементацию

Google

Subbotin
27.05.2018
21:04:54
не поленился и бенчмаркнул
это 10 миллионов поисков по 10 значениям интов
процент попаданий - 50%

Dmitri
27.05.2018
21:12:53
Что делать, если в либе функция возвращает тип недоступный из-вне. Нужна глобальная переменная, хранящая эти данные
Сам тип это переименовая мапа
Не могу понять, его можно к мапе привести как-то?
type rates map[string]float32

Dmitry
27.05.2018
21:21:05
ну видно что хешфункция в стандартной мапе не оптимизирована для малых значений

Meow
27.05.2018
21:24:16
Найдите мне имплементацию мапы, в которой она обгонит масив на малый значениях. Это же просто невозможно.

Dmitry
27.05.2018
21:24:55
а на определеном наборе можно подобрать хешфункцию быстрее

Dmitry
27.05.2018
21:25:42
так что бы и быстрая и колизий не было
например для интов можно просто использовать значение как индекс . уйдет офигено пямти зато поиск будет влет идти

Subbotin
27.05.2018
21:34:10
кстати да. вспомнилось на каком-то из хайлоадов кто-то рассказывал что так считает уникальные телефонные номера. получается всего 1.5 гига памяти зато какая-то ебическая производительность

Dmitri
27.05.2018
21:35:37
так и сделал

DMITRY
28.05.2018
03:05:09
Подскажите приципипиально как решатся данная проблема:
go get -u github.com/mailru/go-clickhouse
go install vendor/golang_org/x/crypto/chacha20poly1305: open /usr/lib/go-1.9/pkg/linux_amd64/vendor/golang_org/x/crypto/chacha20poly1305.a: permission denied
Понимаю что просто прав нету,и можно зайти под рутом прописать PATCH и поставить,но ведь должно быть стандартное решение какое-то?

Алекс
28.05.2018
03:12:11

DMITRY
28.05.2018
03:12:22
да

Google

DMITRY
28.05.2018
03:13:30
env $GOPATH
env: «/home/captain/go»: Отказано в доступе
Фигня какая-то

Алекс
28.05.2018
03:15:15
chown -R

DMITRY
28.05.2018
03:18:38
тут дело в том что он лезет в /usr/lib/go-1.9/pkg/linux_amd64/vendor/golang_org/x/crypto/chacha20poly1305.a: permission denied а там прав то нету,походу один вариант тока под рутом прописывать переменные и ставить под ним

Алекс
28.05.2018
03:19:21
он пытается установить пакет в $GOROOT
потому что не смог в gopath
измени владельца ~/go

DMITRY
28.05.2018
03:21:58
да сделал уже chown -R captain:captain, но не помогло

Admin
ERROR: S client not available

Алекс
28.05.2018
03:22:07
sudo chown -R captain:users go

DMITRY
28.05.2018
03:23:17
sudo shown -R captain:captain не помогает

Алекс
28.05.2018
03:24:26
>captain:captain
точно?
>shown

DMITRY
28.05.2018
03:28:13
да это опечатка
drwxrwxr-x 12 captain captain 4096 янв 10 17:19 go
но да что-то с правами внутри возможно

Алекс
28.05.2018
03:30:59
выхлоп id сюда скопируй

DMITRY
28.05.2018
03:31:10
uid=1000(captain) gid=1000(captain) группы=1000(captain),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare),999(docker)

Алекс
28.05.2018
03:32:05
убунта штоле
ну так а теперь го гет что говорит?

DMITRY
28.05.2018
03:32:28
ну да она самая,да тоже самое
sudo chmod -R 777 go

Google

DMITRY
28.05.2018
03:33:11
сделал и один фиг
go install vendor/golang_org/x/crypto/chacha20poly1305: open /usr/lib/go-1.9/pkg/linux_amd64/vendor/golang_org/x/crypto/chacha20poly1305.a: permission denied

Olzhas
28.05.2018
03:33:50
sudo go get :D

DMITRY
28.05.2018
03:34:30
да там под рутом patch не настроен не поставит
в пятницу причем вроде все ок еще было
так ладно всем спасибо,ошибка понятно что что-то с правами
почему-то еще перекинулось на старую версию go version
go version go1.6.3 linux/amd64
похоже в этом проблема

Алекс
28.05.2018
03:41:24
https://github.com/niemeyer/godeb

Maxim
28.05.2018
03:41:47
С переменными окружения в файле профиля, как полагается

Алекс
28.05.2018
03:42:52

DMITRY
28.05.2018
03:42:57
Угу,похоже apt-get обновил, и все сломалось,а как вообще правильно обновлять?

Maxim
28.05.2018
03:43:26

DMITRY
28.05.2018
03:43:27
если просто обновляешь то потом не собирается ничего так как .src почему на старую версию ссылается

Алекс
28.05.2018
03:43:39

Maxim
28.05.2018
03:43:45
Распаковал, закинул в /usr/lib/, добавил переменную указывающую на этот же путь. Профит
Да, автообновлений не будет, но, хэй, зато будет актуально столько, сколько захочет разработчик