Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/20: Рейтинг темы: голосов - 20, средняя оценка - 4.80
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362

Как подсчитать вероятность?

06.07.2011, 19:57. Показов 4092. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Сделал программу, изменяющую фон рабочего стола ВыньДос на случайный файл из указанной директории. Сколько в ней файлов неизвестно. Может 1000000, а может 1. Решил сэкономить на памяти и выбрать случайный файл за один проход - первый файл запоминается с вероятностью 1 к 1, второй - 1 к 2, третий 1 к 3 и т.д. пока файлы не кончатся. Последний запомненный и есть выбранный. Сделал, а теперь жаба давит: у всех ли файлов одинаковая вероятность выбора?
Подскажите, пожалуйста, как считать вероятность? Всю башку сломал... Не ругайтесь, знаю, что в школе надо было учиться, но поздно пить боржоми...
Заранее спасибо.

Добавлено через 11 минут
Проблема решилась, удалите тему плз.

n-й файл - очевидно
P = 1/n
(n-1)-й - это когда он выбран, а n-й - нет.
P = (1/(n-1)) * (1 - 1/n) = 1/n
(n-2)-й - это когда он выбран, а (n-1)-й и n-й - нет.
P = (1/(n-2)) * (1 - 1/(n-1)) * (1 - 1/n) = 1/n
и т. д.
Вроде одинаковая получается.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2011, 19:57
Ответы с готовыми решениями:

Как подсчитать вероятность появления каждого символа в тексте.
Как подсчитать вероятность появления каждого символа в тексте. Например дана предложение: The method was attributed to Fano, who later...

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

Подсчитать вероятность повтора каждой буквы
как лучше реализовать программу!? У вас есть строка. Надо подсчитать вероятность повтора каждой буквы во всем строке и отсортировать это...

42
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 11:50  [ТС]
Студворк — интернет-сервис помощи студентам
Так мы же при проходе, когда проверяем вероятность, уже имя запоминаем!? И более ничего не нужно уже.

Считать количество файлов, что бы генерить случайное число от 0 до n, это один хлостой проход!

Мой вариант:
Первый файл мы запоминаем с вероятностью 1 к 1, второй 1 к 2, третий 1 к 3 и т.д. до конца. Последний, который запомнили, и есть тот самый случайный.
Если вероятности одинаковые, то зачем лес городить?
Скажите, чем такой подход плох?

Код, к сожелению, на ассемблере, там что смотреть? Дело не в коде а в ИДЕЕ!!!
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 11:53
Цитата Сообщение от Vitam1n Посмотреть сообщение
не только имя файла, но и путь, путь максимум 260 символов,
имя в файла(полное) в Винде подразумевает вот такую запись
C:\dir1\dir2\file.xz
FindFirstFile/FindNextFile
выдает в этом формате
1
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
09.07.2011, 11:55
Цитата Сообщение от Vitam1n Посмотреть сообщение
у него это видимо реализовано так:
C++
1
2
3
4
5
6
7
8
9
float P = 1;
int found = 0;
do
{
 if (...) // проверка на расширение
 {
 P *= 1 / ++found;
 }
}while(FindNextFile(...));
итого n = found.
все равно оптимальней посчитать именно количество, а потом 1 / колисество. так вычислений меньше.
1
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 11:56  [ТС]
Есть константа MAX_PATH называется, она и содержит максимально допустимую длину имени файла вместе с путем.

Vitam1n, вычислений меньше - не согласен, а работы с тормозным жестким диском в 1,5 раза в среднем меньше это точно!
0
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
09.07.2011, 11:59
Цитата Сообщение от ValeryS Посмотреть сообщение
имя в файла(полное) в Винде подразумевает вот такую запись
C:\dir1\dir2\file.xz
FindFirstFile/FindNextFile
выдает в этом формате
в структуре, передаваемой по ссылке в эти функции храниться само название файла. я с ней работал мес назад.

Добавлено через 48 секунд
Цитата Сообщение от Fedor666 Посмотреть сообщение
Последний, который запомнили, и есть тот самый случайный.
он будет просто последний. рандомным выбором картинки, судя по описанию, и не пахнет

Добавлено через 32 секунды
Цитата Сообщение от Fedor666 Посмотреть сообщение
сть константа MAX_PATH называется, она и содержит максимально допустимую длину имени файла вместе с путем.
вот она на х86 машинах равна 260

Добавлено через 21 секунду
Цитата Сообщение от Fedor666 Посмотреть сообщение
Код, к сожелению, на ассемблере, там что смотреть?
что мы, асм код не видели ни разу?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 12:01
Цитата Сообщение от Fedor666 Посмотреть сообщение
Первый файл мы запоминаем с вероятностью 1 к 1, второй 1 к 2, третий 1 к 3 и т.д. до конца. Последний, который запомнили, и есть тот самый случайный.
как ты их собираешься выбирать???
и вероятности надо будет править у всех файлов
Цитата Сообщение от Fedor666 Посмотреть сообщение
Если вероятности одинаковые, то зачем лес городить?
я тоже интересуюсь???
Цитата Сообщение от Fedor666 Посмотреть сообщение
Дело не в коде а в ИДЕЕ!!!
вот идею то мы и не поняли
напиши на псевдо коде или блок схему??
Цитата Сообщение от Fedor666 Посмотреть сообщение
Так мы же при проходе, когда проверяем вероятность, уже имя запоминаем!? И более ничего не нужно уже.
дальше что мы будем делать с этой вероятностью????
Цитата Сообщение от Fedor666 Посмотреть сообщение
Первый файл мы запоминаем с вероятностью 1 к 1, второй 1 к 2, третий 1 к 3 и т.д. до конца. Последний, который запомнили, и есть тот самый случайный.
кажется я врубился
ты создаешь тот же список но так чтоб враги не дагадались
0
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
09.07.2011, 12:01
Цитата Сообщение от Fedor666 Посмотреть сообщение
Vitam1n, вычислений меньше - не согласен, а работы с тормозным жестким диском в 1,5 раза в среднем меньше это точно!
работы одинаковое количество, но по вашему алгоритму операция умножения происходит на кадом файле. вы поинтересуйтесь у гугла как происходит умножение)))
по моему алгоритму нужно 100500 раз итераций (элементарная операция) и одно деление.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 12:06
Цитата Сообщение от Fedor666 Посмотреть сообщение
Последний, который запомнили, и есть тот самый случайный.
Цитата Сообщение от Fedor666 Посмотреть сообщение
теорию вероятности я знаю на отлично,
Это как стыкуется
0
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 12:08  [ТС]
Вот алгоритм, а то уже передрались все

Ищем первый файл
Цикл
Проверяем расширение
Если подходит то
Count++
Генерим случайное число
Делим его на Count
Если остаток 0 то
Запоминаем имя и путь
КонецЕсли
КонецЕсли
Ищем следующий файл
КонецЦикла


Список не создается. Просто новое имя сохраняется поверх старого. И фсе...
1
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
09.07.2011, 12:15
Цитата Сообщение от Fedor666 Посмотреть сообщение
Вот алгоритм, а то уже передрались все


Ищем первый файл
Цикл
Проверяем расширение
Если подходит то
Count++
Генерим случайное число
Делим его на Count
Если остаток 0 то
Запоминаем имя и путь
КонецЕсли
КонецЕсли
Ищем следующий файл
КонецЦикла
эм..


10кб ехе. точна асм? )

дык если сгенерируется 12345, а каунт будет равен 1, то при делении остаток будет равен 0 и путь сохраниться. толк от вычислений. алгоритм в целом неудачный. имхо. уже человек 10 говорят вам как надо было делать. 1 делим на общее количесто = вероятность выбора одного файла у каждого файла из всех. нужный файл узнаем = rand(0,n); переходим и ставим...
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 12:20
Цитата Сообщение от Fedor666 Посмотреть сообщение
Если остаток 0 то
Запоминаем имя и путь
а если не 0???
первый файл мы всегда запомним
второй фифти фифти
третий одна треть
и т.д
или ты заменяешь имя файла
тогда ГУД
но будет зависеть от генератора
может случайное число тоже один раз генерить???
1
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 12:21  [ТС]
Случайное число на каждый файл свое. Это уже какие-то оскарбления пошли
Точно асм, там более половины это иконка и ресурсы.
P.S. Это ж не системный драйвер?!
0
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
09.07.2011, 12:37
точна, иконка много жрет (((.
может алгоритм и работает, но поверхностный взгял говорит о том, что файлы будут выбраны некоторые из первых, что уже в принципе не верно.
еще раз повторюсь: ищем файлы нужного расширения и сохраняем их последовательный номер, генерируем ранломное число от 0 до "всего файлов", переходим по рандомному числу к последовательному нмеру файла. переходим к файлу и делаем с ним все что нужно. минимум памяти и намного меньше вычислений процом, обращений к диску на ~25% больше чем у вас, но результат будет верным.

предлагать написать это на си не буду, ибо если вы на асме пишете, то мое предложение будет слегка неуместным)
0
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 12:53  [ТС]
Практика сделана, теория подтвердилась математически.
Что Вы как коршуны набросились на ребенка? Типа, не делай так, а делай так! Опчем речь? Одна философия! Есть конкретная идея и я хотел узнать Ваше мнение конкретно по ней, а Вы на нее забили и тычите мне свои варианты...
Тема была: "Просчет вероятности", а Вы мне: "Что поделить, какой размер, куда пойти"...

Все, ухожу я от Вас. И не постите более ничего
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 13:21
Vitam1n,
Ты не понял
смотри
1 файл запишем всегда
2 файл перепишет первый с вероятностью 1/2(соответственно первый останется с той же вероятностью)
3 перепишет предыдущий с вероятностью 1/3
................................
как раз на первый взгляд событие равноверотно для всех файлов
но при генерации при каждой итерации случайного числа по моему возникнет перекос
число нужно генерить один раз
возникает вопрос о инициализации генератора
иначе получим то что при каждом запуске программы будет генерится одно и тоже число

Добавлено через 1 минуту
Цитата Сообщение от Fedor666 Посмотреть сообщение
Случайное число на каждый файл свое. Это уже какие-то оскарбления пошли
не понял????
твоя запись
Если подходит то
Count++
Генерим случайное число
Делим его на Count
Добавлено через 9 минут
Цитата Сообщение от Fedor666 Посмотреть сообщение
Практика сделана, теория подтвердилась математически.
Что Вы как коршуны набросились на ребенка?
"Народ! хочет разобраться" (с) "Операция Ы"
1
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 13:37  [ТС]
Число обязано генерироваться каждый раз новое по-любому. Для этого используется rdtsc, возвращающее количество прошедших тактов с момента запуска компа и предыдущее значение. Хотел сначала использовать РСЛОС или конгруэнтный генератор, но нафиг тут такие сложности? Формула расчета вероятности выложена. Что не так???
0
4 / 4 / 0
Регистрация: 19.01.2011
Сообщений: 26
09.07.2011, 14:39
Цитата Сообщение от ValeryS Посмотреть сообщение
1 файл запишем всегда
2 файл перепишет первый с вероятностью 1/2(соответственно первый останется с той же вероятностью)
3 перепишет предыдущий с вероятностью 1/3
1 файл всегда если он 1,
2 файл с вероятностью 1/2 если файлов два.
3 файл с вероятность 1/3 если файлов три

да, прийдя до последнего мы найдем вероятность общую для всех, я с этим согласен. программа рабочая - с этим тоже согласен. результаты подтвердились - еще лучше. но алгоритм очень кривой.
100к файлов по вашему алгоритму это 100к рандомов, это 100к делений 1/n (с потерей точности, ибо цифер после запятой фиксированное количество), а потом 100к умножений этих ДРОБНЫХ чисел. одно только умножение происходит за тактов равное величине второго операнда. деление в 10 раз дольше. толку от ассамблера ноль если кривой алгоритм. я же предложил 100к инкрементов выолняемых за 1 такт и одно деление 1/количество в допустим 100 тактов. 1 проход с инкрементом и 1 деление. и тот же результат.

Fedor666, если вы пришли на форум с вопросами и советами, то не стоит обижаться всякий раз когда ваш код критикуют или советуют более оптимальный вариант.

Добавлено через 7 минут
выбор 1 яблока из мешка в котором 100 яблок. у каждого яблока 1/100 быть выбранным.
федор, ты делаешь так:
вытащили яблоко,
это у нас какое по счету?
1 делим на порядок...ага...умножаем на то что раньше посчитали...ага...запоминаем...
вытащили следующее яблоко.
это у нас какое по счету?
1 делим на порядок...ага...умножаем на то что раньше посчитали...ага...запоминаем...
и так сто раз.

как делаю я:
достали яблоко, раз
достали яблоко, два
достали яблоко, три
...
сто яблок? ага 1 делим на сто....ага...запомнили...
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 15:03
Цитата Сообщение от Fedor666 Посмотреть сообщение
Число обязано генерироваться каждый раз новое по-любому
"это пощему еще"

Цитата Сообщение от Vitam1n Посмотреть сообщение
(с потерей точности, ибо цифер после запятой фиксированное количество),
какая точность ??? проверяется делится число на число или нет.
целочисленая арифметика
Цитата Сообщение от Vitam1n Посмотреть сообщение
потом 100к умножений этих ДРОБНЫХ чисел
это ты где увидел???
1
Основоположник на всё
 Аватар для Fedor666
44 / 44 / 3
Регистрация: 22.02.2010
Сообщений: 362
09.07.2011, 15:03  [ТС]
Какие дробные числа? Только целочисленное деление DIV. И потом счего нам такты считать, если мы в цикле API FindNextFile вызываем? Оптимизация неуместна
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
09.07.2011, 15:04
Цитата Сообщение от Vitam1n Посмотреть сообщение
сто яблок? ага 1 делим на сто....ага...запомнили...
надо выбрать файл а не подсчитывать вероятность
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2011, 15:04
Помогаю со студенческими работами здесь

Подсчитать вероятность исхода футбольного матча
Есть футбольный матч между командами К1 и К2. Подсчитаны вероятности исхода матчей для каждой из команд, по личной статистике. ...

Подсчитать вероятность того, что студент ответит верно
Студент знает 45 билетов из 60, в каждом билете по 2 вопроса, какова вероятность того, что на все 2 вопроса он ответит верно? ...

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

Вероятность наступления события А равна 0.7. Вычислить вероятность следующих событий
Здравствуйте! Вероятность наступления события А равна 0.7. Вычислить вероятность следующих событий: а) Событие А наступит 3 раза в...

Вероятность изготовления на станке стандартной детали равна 0,9. Найти вероятность
Вероятность изготовления на автоматизма станке стандартной детали равна 0,9. Найти вероятность , что с n наугад Взять деталей выявило m...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru