Была поставлена задача создать выборку из чисел в определённом промежутке и определённого диапазона. Выбрать промежуточные значения и вычислить их с помощью spline-интерполяции.
Читать полностью »
Метка «рандом»
Создание выборки random-ых значений и spline-интерполяция промежуточных значений
2014-12-20 в 22:10, admin, рубрики: Песочница, метки: .net, c++, chart, github, visual studio 2013, интерполяция, рандомКак Роберт Моррис на 8-ми битах до 10 000 считал
2014-01-06 в 16:55, admin, рубрики: java, Алгоритмы, вероятность, рандом, счетчик, метки: java, вероятность, рандом, счетчик
Как все знают с помощью n-бит, можно реализовать счетчик считающий до 2n-1, но если у вас очень ограниченные ресурсы, или вам просто хочется поэкспериментировать и объединить в одно целое последовательности, вероятности, рандом и увеличение счетчика, то прошу под кат.
В этой статье мы увидим как работает, так называемый вероятностный счетчик.
Впервые он был представлен Робертом Моррисом в 1977 году, шифровальщиком, работающим в BellLabs, известного своей фразой
Быстрый выбор случайных значений из больших таблиц MySQL по условию
2013-12-23 в 17:23, admin, рубрики: big data, mysql performance, sql, метки: mysql performance, sql, рандом Задача выбора случайных строчек из таблицы довольно часто возникает перед разработчиками.
В случае, если используется СУБД MySQL, обычно она решается примерно следующим способом:
SELECT *
FROM users
WHERE role_id=5
ORDER BY rand()
LIMIT 10
Такой код работает крайне медленно для больших таблиц и когда задается условие WHERE, без WHERE или таблица небольшая, есть эффективные решения, например habrahabr.ru/post/54176/ или habrahabr.ru/post/55864/.
Но решений для случая большой таблицы и необходимости фильтровать по условию, получая при каждом запросе новые значения в сети я не нашел, поэтому описание моего способа под катом.
Читать полностью »
Генератор случайных котов за 8 шагов
2013-09-25 в 9:24, admin, рубрики: 95%, canvas, game development, javascript, коты, котэ, котята, рандом, хорошее настроение, метки: 95%, коты, котэ, котята, рандом, хорошее настроение
Доброго времени!
Я всегда очень любил котов, и любил их рисовать, особенно морды кошачьи. Чуть изменишь форму, линию — и совершенно другое выражение, другое настроение. У меня листы А4 были изрисованы под предел. И тут мне недавно стукнуло в голову — а что если сделать генератор морд котов? Чтобы нажал на кнопочку и тебе выкинется случайная морда кота. Как можно более случайная и интересная. Давайте же посмотрим, как же сделать такую штуку.
Прошу под кат, любители котов.
Читать полностью »
Отимизируем, оптимизируем и еще раз оптимизируем
2013-08-07 в 7:14, admin, рубрики: date, java, optimization, pattern, truncate, метки: date, java, optimization, pattern, truncate, рандом По долгу службы мне периодически приходится пользоваться профайлером, так как требования к производительности серверов задокументированы и не могут опускаться ниже определенного уровня. Помимо некоторых очевидных архитектурных изменений и решений частенько находятся повторяющиеся места от модуля к модулю, от одного проекта к другому, которые создают дополнительную нагрузку на виртуальную машину, которыми и хочу поделится.
Так уж случилось, что на глаза чаще всего попадался код работы с Date потому с него и начнем:
Date
Не один десяток раз я имел возможность наблюдать, как во время обработки одного запроса от пользователя в нескольких разных местах создается новый объект даты. Чаще всего цель одна и та же — получить текущее время. В простейшем случае это выглядит так:
public boolean isValid(Date start, Date end) {
Date now = new Date();
return start.before(now) && end.after(now);
}
Казалось бы — вполне очевидное и правильное решение. В принципе, да, за исключением двух моментов:
- Использовать Date сегодня в java — уже, пожалуй, моветон, учитывая тот факт, что почти все методы в нем уже Deprecated.
- Нету смысла создавать новый объект даты, если вполне можно обойтись примитивом long:
public boolean isValid(Date start, Date end) {
long now = System.currentTimeMillis();
return start.getTime() < now && now < end.getTIme();
}
SimpleDateFormat
Очень часто в веб проектах возникает задача перевести строку в дату или наоборот дату в строку. Задача довольно типичная и чаще всего выглядит так:
return new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").parse(dateString);
Это правильное и быстрое решение, но если серверу приходится парсить строку на каждый пользовательский реквест в каждом из сотен потоков — это может ощутимо бить по производительности сервера в виду довольно тяжеловесного конструктора SimpleDateFormat, да и помимо самого форматера создается множество других объектов в том числе и не легкий Calendar (размер которого > 400 байт).
Ситуацию можно было бы легко решить, сделав SimpleDateFormat статическим полем, но он не является потокобезопасным. И в конкурентной среде легко можно словить NumberFormatException.
Вторая мысль — использовать синхронизацию. Но это таки довольно сомнительная вещь. В случае большой конкуренции между потоками, мы можем не просто не улучшить производительность но и ухудшить.
Но решения есть и их как минимум 2:
- Старый, добрый ThreadLocal — cоздаем SimpleDateFormat для каждого потока 1 раз и переиспользуем для каждого последующего запроса. Данный подход поможет ускорить парсинг даты в 2-4 раза за счет избежания создания объектов SimpleDateFormat на каждый запрос.
- Joda и ее потокобезопасный аналог SimpleDateFormat — DateTimeFormat. Хоть йода в целом и медленнее дефолтного Java Date API в парсинге дат они идут наравне. Несколько тестов можно глянуть тут.
Random’изация в Python. Так ли она рандомна?
2013-06-17 в 5:02, admin, рубрики: python, рандом, Чулан, метки: python, рандом
Доброе время суток, читатели. Несмотря на глубокое название поста, суть его состоит в описании борьбы с собственной глупостью в решении уже изученных проблем. Последнее время часто размышлял над темой «случайность». Что же задает эту самую случайность? Ввиду того, что люблю до всего доходить сам — не полез в поисковики, а полез в Python.
Читать полностью »
Управляемый random в JavaScript
2013-06-02 в 18:56, admin, рубрики: javascript, rpg, метки: javascript, rpg, рандом «Алгоритм» для случайной выборки значений из array
без их повторения. Конкретнее, в рамках обучения JS, я использовал его для генерации классической RPG-группы персонажей (варвар, маг, вор, рыцарь, священник), без повторения классов и имен.
Принцип предельно простой, но он может быть полезен таким же новичкам в JS как и я. Привязка к RPG исключительно символическая — сейчас я активно пытаюсь сменить профиль с маркетинга на IT (понял, что душа лежит), а практиковаться в игровой форме гораздо интереснее.
Читать полностью »
«Человеческая» энтропия для генератора случайных чисел
2013-04-10 в 6:58, admin, рубрики: .net, Алгоритмы, ГСЧ, криптография, метки: ГСЧ, криптография, рандомЛишь вследствие нашей слабости, вследствие нашего невежества случайность для нас существует
А. Пуанкаре
Чем больше люди постигали тайны Вселенной, тем ближе они приближались к той точке незнания, в которой их предки все приписывали богам. Теперь это называется – случайность. И хотя Эйнштейн не верил в случайность – он говорил «Бог не играет в кости», – он в числе первых из списка: Эйнштейн, Шредингер, Лаплас…
В наш век цифровых технологий и огромной роли информации в развитии человечества защита информации – актуальнейшая задача. Технологическое решение этой задачи предполагает привлечение «случайности», а именно – генерацию случайных чисел. При этом от качества используемых генераторов напрямую зависит качество получаемых результатов. Это обстоятельство подчёркивает известный афоризм Роберта Р. Кавью из ORNL: «генерация случайных чисел слишком важна, чтобы оставлять её на волю случая».
Читать полностью »
Генератор энтропии Seeder 1.1 существенно уменьшает лаги на Android-устройствах
2013-01-06 в 12:09, admin, рубрики: android, ГСЧ, интерфейсы, лаги, операционные системы, отзывчивость интерфейса, скорость работы, энтропия, метки: ГСЧ, лаги, отзывчивость интерфейса, рандом, скорость работы, энтропия В старых версиях Android некоторые системные компоненты и JVM активно считывали большие объёмы случайных чисел из псевдоустройства /dev/random
. Это устройство предоставляет интерфейс к системному генератору случайных чисел (ГСЧ), который выводит шумы из драйверов устройств и других источников в «хаотичный» пул. На старых версиях Android иногда возникали проблемы с наполнением пула случайных чисел. В случае опустошения пула возникали лаги UI, пока пул не наполнялся. В новых версиях Android проблему с лагами UI решили, но не до конца: всё-таки иногда возникают характерные задержки.
Многие пользователи считали, что лаги интерфейса объясняются недостаточной производительностью CPU, на самом деле это не так.
Один из разработчиков с форума XDA-Developers перекомпилировал rngd
, так что пул случайных чисел каждую 1 секунду пополняется из пула псевдослучайных чисел /dev/urandom
. Результат — потрясающее ускорение интерфейса Android с почти полным исчезновением лагов! Chrome, карты и другие тяжеловесные приложения теперь мгновенно переключаются между задачами.
Читать полностью »
Играемся с изображениями в Python
2012-12-23 в 15:25, admin, рубрики: PIL, python, изображения, обработка изображений, метки: PIL, python, изображения, обработка изображений, рандом В этой статье я хотел бы разобрать различные способы преобразования изображений с помощью Python. Для примеров я решил взять несколько наиболее известных. В статье не будет ничего сложного, она ориентированна в основном на новичков.
Картинка для испытаний:
Подготовка
import random
from PIL import Image, ImageDraw #Подключим необходимые библиотеки.
mode = int(input('mode:')) #Считываем номер преобразования.
image = Image.open("temp.jpg") #Открываем изображение.
draw = ImageDraw.Draw(image) #Создаем инструмент для рисования.
width = image.size[0] #Определяем ширину.
height = image.size[1] #Определяем высоту.
pix = image.load() #Выгружаем значения пикселей.
Оттенки серого
Для получения этого преобразования необходимо «усреднить» каждый пиксел.
if (mode == 0):
for i in range(width):
for j in range(height):
a = pix[i, j][0]
b = pix[i, j][1]
c = pix[i, j][2]
S = (a + b + c) // 3
draw.point((i, j), (S, S, S))