TGViewer
Channel Public Channel
Чайник из Юты

Чайник из Юты

@irrationalthings

Не смешно
Subscribers
121
Photos
216
Videos
3
Links
144

Showing posts older than #547 · Back to latest

Older Posts 20 shown
Post #545 219
daria smyr Photo
Прикольно. Не знал, что они умеют избегать зануления.

Правда, я всё равно считаю не самым лучшим дизайнерским решением то, что ты подсказываешь компилятору, что ты хочешь не посредством явных подсказок, а с помощью просто тупых стейтментов в надежде, что оно там всё само поймёт. Подстановка runtime.mapclear заместо delete(k, v) в цикле туда же в копилочку
Post #543 259
Кратенький фанфакт. Обычно используется 0 как литерал для null pointer (говоря о С, макрос NULL там тоже обычно раскрывается в (void*)0 (иногда может в просто 0 или 0L)). Но совершенно не гарантируется стандартом, что 0 будет валидным null pointer для архитектуры! Вот тут hall of shame для именно таких динозавров с nullptr != 0.

Когда-то давно нулл реально дефайнился условно, т.е. он раскрывался в разные вещи для разных целевых платформ. Сейчас этого уже нет, но стандарт-то ведь не изменился. А решение придумали смешное.

Сейчас компилятор (что С, что плюсовый) сам подставляет корректный нулевой адрес вместо литерала 0 в контексте указателей.

Ну, то есть, получили, что ноль не всегда ноль. Ноль в контексте инта - ноль. Ноль в контексте указателя - нихуя не гарантированно ноль. Ноль ноль!
  • 😁 4
Post #542 317
Rejection Sampling and Uniform Distribution

Одна из характеристик хорошей rand-функции — равномерное распределение. Это означает, что каждое возможное значение имеет одинаковую вероятность быть выбрано

Представим, что у вас есть функция rand7(), которая равномерно возвращает случайное число в диапазоне [1, 7]. Наша задача — написать функцию rand10() с диапазоном [1, 10], сохранив равномерное распределение. Дальше вместо rand7() будут использоваться переменные a и b. Скорее всего, вы сходу предложите одну из примитивных реализаций. Вот примеры:

func rand10() int {  
a, b := rand7(), rand7()
return a + b % 3
}


func rand10() int {  
a, b := rand7(), rand7()
return (a * b) % 10 + 1
}


Обе реализации неправильны

В первом варианте b % 3 даёт остатки от деления на 3, т.е. 0, 1 или 2 не с одинаковой вероятностью. Остаток 1 встречается чаще остальных, из-за чего получается неравномерное распределение итоговых значений.

Во втором варианте количество способов получить каждое произведение a * b тоже неравномерное.
Например:
- 1 = 1 * 1 → 1 комбинация
- 6 = 1*6, 2*3, 3*2, 6*1 → 4 комбинации
- 12 = 2*6, 3*4, 4*3, 6*2 → 4 комбинации
- 36 = 6*6 → 1 комбинация
и так далее

(...) % 10 + 1 ещё больше усугубляет ситуацию, потому что например при product = 2, 12, 22, 32, 42 мы будем везде получать значение 3

На графиках можно наглядно увидеть перекос, перебрав все 49 возможных комбинаций a и b.

Правильное решение

Рассмотрим формулу:
((a - 1) * 7 + b ) % 10 + 1

Она почти равномерна: значения от 1 до 10 встречаются почти с одинаковой частотой, за исключением 10, которое появляется всего 4 раза, тогда как остальные — по 5 раз.

Причина проста - всего комбинаций 7 × 7 = 49, нам не хватает числа 50.

Можно ли без него? Можно - проблема решается с помощью rejection sampling - мы отбрасываем значения больше 40. На языке кода мы делем пересчёт if num > 40. Тогда остаются только 40 комбинаций, которые можно равномерно разбить на 10 групп по 4 значения, что и видно на последней диаграмме

Финальный код:
func rand10() int {  
for {
a, b := rand7(), rand7()
num := (a-1)*7 + b

if num <= 40 {
return 1 + (num-1)%10
}
}
}


Задача на Leetcode: https://leetcode.com/problems/implement-rand10-using-rand7/
  • 👍 5
Post #541 320
Чайник из Юты Все знают про фатальный недостаток - мем, касающийся Поттеринга, и отсылающийся к переписыванию уже работающего, при этом производя bloatware (какого хуя системд имеет отношение к буту?). А что насчёт NIH - not invented here, как синдром, возникающий при…
https://neolurk.org/wiki/%D0%A4%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D0%BA#Not_Invented_Here
Post #540 294
Все знают про фатальный недостаток - мем, касающийся Поттеринга, и отсылающийся к переписыванию уже работающего, при этом производя bloatware (какого хуя системд имеет отношение к буту?).

А что насчёт NIH - not invented here, как синдром, возникающий при выборе чего-либо? Если это что-то изобретено не здесь - мы это не берём.

И как диаметральная противоположность - NIT, not invented there. Каюсь, и сам слегка подвержен.

Никаких выводов. Никакой морали. Минутка просвящения.
  • 🤔 1
Post #539 269
Чайник из Юты во-вторых этот код валиден

This post (sticker, poll or similar) has no web preview. Open in Telegram

  • 💘 1
Post #538 254

Forwarded from Вадик

во-вторых этот код валиден
  • 🤯 2
Post #537 280

This post (sticker, poll or similar) has no web preview. Open in Telegram

  • 🤯 3
  • 👍 1
Post #536 267
Жуть, жуть
  • 🗿 2
Post #534 296
😐
  • 🤯 2
Post #533 276
  • 🔥 2
  • 🤯 1
Post #530 254
https://jasonfantl.com/posts/What-is-Entropy/

Введение в понятие энтропии из разных разделов. Начиная с более лайтового из теории информации, продолжая физикой, заканчивая временем и чем-то совсем уж страшным. Интересна
Jason Fantl What is Entropy? People say many things about entropy: entropy increases with time, entropy is disorder, entropy increases with energy, entropy determines the arrow of time, etc.. But I have no idea what entropy is, and from what I find, neither do most other people. This…
Post #529 223
Hacker News Tariff: A Python package that imposes tariffs on Python imports Article, Comments
🏆
Post #527 244
  • 🥴 5
Post #526 297
Чайник из Юты Swissmap, на которую сейчас в го переходят, кстати, тоже есть таблицей на открытой адресации. Только они добавили ещё так званую метадату - отдельный (на самом деле, не очень) массив чаров, что и обращения к памяти более локализирует (более кэш-френдли =>…
В комментариях я сказал, что при близкой к полной заполненности операция сопоставления или вставки в открытую хэш-таблицу может никогда не завершиться. Логично, ведь если таблица полностью заполнена - мы никогда не наткнёмся на свободный слот, который и является маркером "дальше ходу нет" (куда пишем при вставке, и при котором отчитываемся об обсутствии вхождения при сопоставлении).

Это решается счётчиком просмотренных слотов. Но этот способ интересен тем, что ограничение количества попыток нахождения слота также является один из способов борьбы с кластеризацией. Если я правильно понял, то если вставка валится из-за того, что свободный слот не был найден в промежутке i..i+n (где n - максимальное количество тех самых попыток, или же просмотра слотов), то мапа инициирует ресайз.

ПыСы забыл добавить линк на описание способов открытой адресации, только более формальным языком: https://math.gsu.by/wp-content/uploads/courses/structure/L8.6.4.html
  • 👍 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →