Size: a a a

Scala User Group

2020 October 14

SS

Serhiy Stas in Scala User Group
"But pullbacks have more general applications, also in programming. For instance, consider C++ classes as a category in which morphism are arrows that connect subclasses to superclasses. We’ll consider inheritance a transitive property, so if C inherits from B and B inherits from A then we’ll say that C inherits from A (after all, you can pass a pointer to C where a pointer to A is expected). Also, we’ll assume that C inherits from C, so we have the identity arrow for every class. This way subclassing is aligned with subtyping. C++ also supports multiple inheritance, so you can construct a diamond inheritance diagram with two classes B and C inheriting from A, and a fourth class D multiply inheriting from B and C. Normally, D would get two copies of A, which is rarely desirable; but you c"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Serhiy Stas
Пулбеки, пуш ауты
Лимиты и колимиты за пределами произведений и сум плохо применимы в обычных ЯП, потому что выражаются через зависимые рекорды / quotient types соответственно. Единственное, что сразу приходит на ум - это https://categoricaldata.github.io/

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

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

SS

Serhiy Stas in Scala User Group
Oleg ℕizhnik
Лимиты и колимиты за пределами произведений и сум плохо применимы в обычных ЯП, потому что выражаются через зависимые рекорды / quotient types соответственно. Единственное, что сразу приходит на ум - это https://categoricaldata.github.io/

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

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

R

RAFIZ in Scala User Group
всем привет, вопрос по scala.collection.immutable.TreeMap

вставка и поиск для неё работают за О(logN)

вопрос: за какое время операция .head работает?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
за такое же
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
за такое же
a .apply()?
источник

R

RAFIZ in Scala User Group
я просто не могу понять. если её распечатать (toString) то она выведется в порядке следования ключей. а учитывая, что эти ключи размещены в красно-чёрном дереве, то нужно линейное время, чтобы ключи отсортировать и вернуть. и что, получается каждый раз для вызова toString требуется O(n)?

или в реализации структуры есть приватная переменная, в которую один раз кэшируется отсортированные ключи и каждый раз просто она и вызывается?до изменения переменной, конечно
источник

R

RAFIZ in Scala User Group
вот условно. ключи всегда отсортированы.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
a .apply()?
apply - это же взятие по индексу
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
apply - это же взятие по индексу
ага
источник

R

RAFIZ in Scala User Group
RAFIZ
всем привет, вопрос по scala.collection.immutable.TreeMap

вставка и поиск для неё работают за О(logN)

вопрос: за какое время операция .head работает?
я хотел обобщить этот вопрос
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
я просто не могу понять. если её распечатать (toString) то она выведется в порядке следования ключей. а учитывая, что эти ключи размещены в красно-чёрном дереве, то нужно линейное время, чтобы ключи отсортировать и вернуть. и что, получается каждый раз для вызова toString требуется O(n)?

или в реализации структуры есть приватная переменная, в которую один раз кэшируется отсортированные ключи и каждый раз просто она и вызывается?до изменения переменной, конечно
O(n log n)
источник

R

RAFIZ in Scala User Group
с head-ом разобрались. а получение любой другой пары в порядке следования?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
конечно требуется
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
с head-ом разобрались. а получение любой другой пары в порядке следования?
тоже логарифм, всё как в красно чёрном дереве
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
O(n log n)
почему ?откуда там множитель логарифмический?и зачем?)
источник

R

RAFIZ in Scala User Group
ключи понятно - кладутся в красно-чёрное дерево. а значения куда кладутся?как это работает?
источник

R

RAFIZ in Scala User Group
я так понимаю, значение кладутся вместе с ключами в узлы дерева просто
источник

R

RAFIZ in Scala User Group
RAFIZ
я так понимаю, значение кладутся вместе с ключами в узлы дерева просто
поэтому когда нашли ключ, его значение выдаётся за константное время уже. тупо потому что оно рядом с ним же и лежит (как в HashTable)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
RAFIZ
почему ?откуда там множитель логарифмический?и зачем?)
ну вообще для обхода RBT нужна линейная сложность, но в скале по-моему там хуже
источник