@proGO

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

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
кстати интересно а как внутрях работает итерация по мапе. не будет for _, v:=range mapa { if v.id == id {} } быстрее чем mapa[id]
Тут надо понимать что мапа не массив, а массив массивом грубо говоря. Потому что всегда возможны коллизии хешей. Поэтому работать должно медленее чем слайс

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

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

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

Subbotin
27.05.2018
20:12:12
не будет. первый имеет сложность O(n) , второй O(1)
ну поиск по array перебором тоже O(n) но до сотни значений работает быстрее чем через хэширование со сложностью O(1)

Dmitry
27.05.2018
20:12:27
ну поиск по array перебором тоже O(n) но до сотни значений работает быстрее чем через хэширование со сложностью O(1)
O это асимптотическая сложность - она не говорит то что всегда O(n) > O(1) . Она говорит о том что сложность алгоритма всегда не превысит асимптоту O(n) или O(1) при стремлении к бесконечности

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
какая альтернатива 1 поиску в массиве из 10000 элементов? (толще подсказывать не буду)
вначале вы говорите о малых n, а теперь о 10000 тысяч элементах. вы уж определитесь.

Subbotin
27.05.2018
20:36:32
вначале вы говорите о малых n, а теперь о 10000 тысяч элементах. вы уж определитесь.
так. понятно. подсказываю. бывают например случаи когда надо поискать 1000 раз в массиве из 10 элементов.

тогда есть смысл мерять скорость выполнения для малых 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 и поставить,но ведь должно быть стандартное решение какое-то?

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 почему на старую версию ссылается

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

Да, автообновлений не будет, но, хэй, зато будет актуально столько, сколько захочет разработчик

Страница 1463 из 1674