Category: лытдыбр

Category was added automatically. Read all entries about "лытдыбр".

with Cat The Cat

Если спутники летают с юга на север...

...то я видел спутник.

Если нет, то видел НЛО - оно не мигало, как самолёт. Может, это был метеор под большим углом к поверхности Земли, конечно, однако яркость сперва плавно нарастала, а потом плавно снижалась, медленнее, чем у падающей звезды, которых я тоже насмотрелся недели две-три назад.

Окрестности подмосковного Чехова невероятно интересны.
with Cat The Cat

Колесо и четыре ноги.

Колесо в живой природе существует только в микромире - жгутики у бактерий и красные кровяные тельца.

А в макромире нет. И его пришлось изобретать, сравнивая с четырьмя ногами животных.

Но это всё философия.

Короче говоря, подражать природе можно, но путь человеческой мысли, это, скорее, путь колеса или винта или турбины самолёта.
with Cat The Cat

Разное

Игра «Свидетель» гениальна в своей задумке и очень слабая в мобильной версии. В некоторых местах надо смотреть на предметы под разными углами и на айпаде это просто невозможно. В мобильной версии нет даже действия «присесть»!

Однако за ощущение «Ага! Вот, как!» после решения очередной головоломки смело можно давать приз. ;)

Получил некий интересный результат в моих экспериментах с оптимизацией через Лагранжиан. Думаю, скоро поделюсь. Пока проблема в том, что мой комп для программирований-хобби сломался, я использую чужой, а у него и памятью, и ср всем другим тоже плохо. И неохота создавать новый ключ для гит-Абакан.
with Cat The Cat

Ещё к вопросу про Clojure.

Мне повезло настолько, что я пользовался Clojure задолго до его (её?) появления, лет за семь до. Тогда Clojure назывался Tcl и платформой, на которую он опирался, был... весь юникс. Примерно так.

Как Clojure является клеевым языком, так и Tcl таковым являлся. Как Clojure представляет из себя "улучшенный" Лисп, так и Тикль представляет собой Лисп без лишних круглых скобочек и с добавленными другими скобочками.

Так что я имею представление, что такое клеевые языки.

Это чрезвычайно мощная штука.

Но вот пришлось мне для документооборота писать разбор SQL, чтобы сгенерировать кое-какой код по нему. И выяснилось, что в Тикле это чрезвычайно тяжело.

Собственно, сейчас мне было бы легче, поскольку сейчас я программист посильнее. Поэтому если я возьмусь за Clojure, мне будет легче, чем на тикле тогда.

Мне это просто неинтересно.
with Cat The Cat

Как ускорить попарную нормализованную корреляцию в тысячу раз.

Нормализованная корреляция - это вычисление скалярного произведения двух последовательностей, деленного на произведение их длин.

C(si,sj) = sumk=1..L[siksjk/(|si| |sj|)]

Если длина последовательности 1000, а последовательностей тоже 1000, то всего получается 1000*1000*(1000-1)/2=499500000 умножений и чуть меньше сложений. То есть, сложность O(LN2). Здесь L - длина последовательности, а N - их количество

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

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

Хорошие последовательности имеют спектр вида 1/f - "розовый" шум или даже красный шум, с большими низкими частотами и амплитуда частоты (примерно) уменьшается с её возрастанием. Низкие частоты вносят большой вклад в корреляцию, поэтому разумно брать их в качестве существенной части.

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

Если говорить о практической пользе, то "хорошие" последовательности наблюдаются в колебаниях цен на продукты, а "плохие" - в "выгоде", (ценаi+1-ценаi)/ценаi.

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

С плохими последовательностями такой трюк не пройдет.

Для плохих последовательностей не работает даже разложение по сингулярным значениям (это квадраты собственных значений).

Но для них придумали особый подход - проекции на случайные вектора.

Мы генерируем псевдослучайные последовательности, числом M и длиной L, со значениями 1 и -1, и выполняем с ними свертку всех последовательностей. Получается вектор длиной M, sketch vector, набросок.

Так вот, доказано, что расстояние между нормализованными векторами-набросками пропорционально корреляции между последовательностями: D(x, x) = 2(1+corr(x,y)). D - расстояние, x - временная последовательность, x - нормализованный вектор-набросок. Отсекая по расстоянию, мы отсекаем по корреляции. Можно отсечь все с корреляцией менее порога (колебания цены на схожие продукты), можно отсечь все с корреляцией выше порога (конкурирующие компании).

Все. Остались только технические вопросы - как сделать подходящий генератор псевдослучайных чисел, как считать побыстрее в процессе добавления элементов в последовательности и тп. Это, натурально, решается очень просто.
with Cat The Cat

Про IQ.

http://www.mccme.ru/edu/vassiliev/IQ.pdf

Статья разбирает только тест Айзенка, но есть еще (культурно-независимый) тест с матрицами Равена: http://en.wikipedia.org/wiki/Raven's_Progressive_Matrices

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

Поэтому IQ живет и процветает - скорость решения простых задач коррелирует с возможностью решения сложных, а угадать ответы гевозможно.

Да, кстати, IQ повышается медикаментозно - тестостерон, кофеин, и тп. Надо большое количество нейромедиаторов, или лучшая проводимость нейронов.
with Cat The Cat

"Генератор лабиринтов" в одну строку.

maze = map (("\\/" !!) . (`mod` 2) . (`mod` 65537)) $ iterate ((+1) . (*0x8088405)) 123
Запускать с помощью "putStr maze".

А по ссылке выше есть ещё ссылочки - например, на печать изображений с дополнением цифровой информацией.
with Cat The Cat

Попробовал задачку nponeccop.

Задачка.

Мой текущий вариант решения.

Работает плохо, на диапазонах типа "192.168.2.4,193.0.0.3" сжирает всю память.

Попробовал два варианта упрощения дерева разбора: foldr и попарное упрощение:
reduceTrees [] = Failure
reduceTrees [t] = t
reduceTrees ts =
	-- foldr joinTree Failure ts
	reduceTrees (reduce ts)
	where
		reduce (a:b:ts) = joinTree a b : reduce ts
		reduce ts = ts
Разница в 20% времени выполнения.

Такое попарное упрощение справедливо для коммутативных операций.

Плохое поведение можно улучшить. Но не сегодня. ;)