導航:首頁 > 源碼編譯 > 隨機演算法怎麼實現的

隨機演算法怎麼實現的

發布時間:2022-06-18 11:40:32

A. java怎麼進行隨機數生成演算法

要產生隨機數,可以使用Java api中java.lang包中的Math類.Math類以靜態方法的方式提供常用的數學方法,
其中Math.random()方法是一個可以產生[0.0,1.0]區間內的一個雙精度浮點數的方法
如:
產生一個100以內的整數:int x=(int)(Math.random()*100);
又如:
產生一個1-50之間的隨機數:int x=1+(int)(Math.random()*50)
也可以使用通用創建對象來獲取:
Random random = new Random();
random.nextInt(x);
產生一個0到x-1的正數,如果想產生浮點數有Random類的nextFloat方法,總之nextXXX方法是用來產生隨機數的。

B. 隨機演算法原理

展開專欄
登錄
企鵝號小編
5.7K 篇文章
關注
詳解各種隨機演算法
2018-02-06閱讀 1.4K0
轉自:JarvisChu

之前將的演算法都是確定的,即對於相同的輸入總對應著相同的輸出。但實際中也常常用到不確定的演算法,比如隨機數生成演算法,演算法的結果是不確定的,我們稱這種演算法為(隨機)概率演算法,分為如下四類:

1、數值概率演算法

用於數值問題的求解,通常是近似解

2、蒙特卡洛演算法Monte Carlo

能得到問題的一個解,但不一定是正確解,正確的概率依賴於演算法運行的時間,演算法所用的時間越多,正確的概率也越高。求問題的准確解;

3、拉斯維加斯演算法 Las Vegas

不斷調用隨機演算法求解,直到求得正確解或調用次數達到某個閾值。所以,如果能得到解,一定是正確解。

4、舍伍德演算法 Sherwood

利用隨機演算法改造已有演算法,使得演算法的性能盡量與輸入數據無關,即平滑演算法的性能。它總能求得問題的一個解,且求得的解總是正確的。

隨機數

概述

計算機產生的隨機數都是偽隨機數,通過線性同餘法得到。

方法:產生隨機序列


d稱為種子;m取值越大越好;m,b互質,常取b為質數;

C. 如何用計算機求隨機數

計算機隨機數是用一個隨機函數生成隨機數,但實際上並非無規律,他其實是將一個數通過某種過程生成另一個數,然後將生成的數再次進行此過程,直到出現循環(一定會出現循環),如:
設一個數a;
給a一個值;
對a進行某過程;//此過程一般很復雜
得到b;
再對b進行此過程;
(依次類推)
....
這樣的結果是能夠得到出現幾率幾乎相等的一組數,但他們是有規律的,是可以破解的.
但這只是菜鳥所用的"隨機數",真正的計算機隨機數可以做到隨機,
以上面的解釋為例,你可以多設幾個過程,根據時間決定使用哪個過程,或者把時間也作為一個參數,還有很多方法也可以做到隨機,總之,想破解隨機數是不可能的.
我是第一個回答的,如果你覺得夠詳細,就追加點分吧.

D. 求問隨機森林演算法的簡單實現過程

隨機森林(Random forest)指的是利用多棵樹對樣本進行訓練並預測的一種分類器。 並且其輸出的類別是由個別樹輸出的類別的眾數而定。在機器學習中有一個地位很重要的包scikit-learn可實現隨機森林演算法。


原理:(隨機森林的分類預測和回歸預測sklearn.ensemble.RandomForestRegressor方法)
(1)給定訓練集S,測試集T,特徵維數F。確定參數:使用到的CART的數量t,每棵樹的深度d,每個節點使用到的特徵數量f,終止條件:節點上最少樣本數s,節點上最少的信息增益m,對於第1-t棵樹,i=1-t:
(2)從S中有放回的抽取大小和S一樣的訓練集S(i),作為根節點的樣本,從根節點開始訓練
(3)如果當前節點上達到終止條件,則設置當前節點為葉子節點,如果是分類問題,該葉子節點的預測輸出為當前節點樣本集合中數量最多的那一類c(j),概率p為c(j)占當前樣本集的比例;如果是回歸問題,預測輸出為當前節點樣本集各個樣本值的平均值。然後繼續訓練其他節點。如果當前節點沒有達到終止條件,則從F維特徵中無放回的隨機選取f維特徵。利用這f維特徵,尋找分類效果最好的一維特徵k及其閾值th,當前節點上樣本第k維特徵小於th的樣本被劃分到左節點,其餘的被劃分到右節點。繼續訓練其他節點。
(4)重復(2)(3)直到所有節點都訓練過了或者被標記為葉子節點。
(5)重復(2),(3),(4)直到所有CART都被訓練過。
隨機森林的簡單實現過程如下:
一、 開發環境、編譯環境:
PyCharm Community Edition 2016.2.3
python2.7.10
二、 所用庫及安裝方法:
pandas[python自帶]
sklearn:命令行pip install sklearn;如果沒有安裝pip,先使用easy_install pip安裝pip;如果在MAC上沒有許可權,使用sudo pip install sklearn;
三、 代碼介紹
1. 使用pandas讀取本地excel的訓練集和測試集,將屬性集賦給X_train和Y_train;將要預測的集合賦給X_test和Y_test;
2. 使用DictVectorizer對數據進行規范化、標准化
3. 生成RandomForestRegressor對象,並將訓練集傳入fit方法中進行訓練
4. 調用predict函數進行預測,並將結果存入y_predict變數中;
5. 使用mean_squared_error、score方法輸出MSE、NMSE值對擬合度、穩定度進行分析;輸出feature_importance,對影響最終結果的屬性進行分析;
6. 詳細代碼見附錄
四、 附錄
# coding:utf-8
import pandas as pd
data_train = pd.read_excel('/Users/xiaoliu/Desktop/data_train.xlsx')
X_train = data_train[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]
y_train = data_train['FJ']

data_test = pd.read_excel('/Users/xiaoliu/Desktop/data_test.xlsx')
X_test = data_test[['CPI', 'GDP', 'PPI', 'AJR', 'BJFJ', 'FBDR', 'PCFD', 'PCFDED', 'BDR']]
y_test = data_test['FJ']

from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='records'))
X_test = vec.transform(X_test.to_dict(orient='records'))

from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_train,y_train)
y_predict = rf.predict(X_test)
print 'predict value:',y_predict

from sklearn.metrics import mean_squared_error
print 'MSE:', mean_squared_error(y_test, y_predict)
print 'NMES:',rf.score(X_test, y_test)
print rf.feature_importances_

E. python中的隨機數是怎麼實現的

PYTHON中的偽隨機數發生器用的是梅森旋轉演算法。
梅森旋轉演算法(Mersenne twister)是一個偽隨機數發生演算法。由松本真和西村拓士在1997年開發,基於有限二進制欄位上的矩陣線性遞歸。可以快速產生高質量的偽隨機數,修正了古典隨機數發生演算法的很多缺陷。
梅森旋轉演算法是R、Python、Ruby、IDL、Free Pascal、PHP、Maple、Matlab、GNU多重精度運算庫和GSL的默認偽隨機數產生器。從C++11開始,C++也可以使用這種演算法。
整個演算法主要分為三個階段:獲得基礎的梅森旋轉鏈;對於旋轉鏈進行旋轉演算法;對於旋轉演算法所得的結果進行處理。
演算法實現的過程中,參數的選取取決於梅森素數,故此得名。
梅森素數由梅森數而來。所謂梅森數,是指形如2↑p-1的一類數,其中指數p是素數,常記為Mp 。如果梅森數是素數,就稱為梅森素數。
例如4-1=3,8-1=7,16-1=15(不是素數),32-1=31,64-1=63(不是素數)等等。

F. c語言里 random函數怎麼實現的

  1. rand函數是根據一個數(我們可以稱它為種子)為基準,以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,

  2. 但這產生的並不是真意正義上的隨機數,是一個偽隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值。

  3. 種子相同,產生的隨機序列相同。這樣做的好處是,方便我們產生一組固定的隨機序列,用來調試程序。

  4. C提供了srand()函數,用來設置種子,它的原形是void srand( int a)。

  5. 在調用rand函數產生隨機數前,應該先利用srand()設好隨機數種子,如果未設隨機數種子,默認種子為1。

G. random rece命令怎麼控制隨機

通過Random類。
Random類中實現的隨機演算法是偽隨機也就是有規則的隨機。在進行隨機時,隨機演算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。這點在生成多個隨機數字時需要特別注意。(只要種子一樣,獲取的隨機數的序列就是一致的。是一種為隨機數的實現,而不是真正的隨機數)。
Math類中也有一個random方法,該random方法的工作是生成一個[0,1.0)區間的隨機小數。Math類中的random方法就是直接調用Random類中的nextDouble方法實現的。

H. 隨機演算法的基本概念

隨機演算法是演算法本身包含了隨機數生成器的演算法。根據《演算法導論(中文第二版)》描述,在進行演算法分析的時,有時可以在獲得了一定輸入分布信息之後對輸入的分布進行一定的假定,在此基礎上進行平均情況分析得到演算法的時間復雜度。然而有時候無法獲得輸入分布的信息,這時可以在演算法本身增加一定的隨機性,繼而實現對演算法進行平均情況分析。通過設計隨機演算法有效地避免較多的較壞情況輸入的出現,從而提高演算法的平均情況下的性能。

I. 微信紅包的隨機演算法是怎樣實現的

當有人在微信群里發了一個 N 人的紅包、總金額 M 元,後台大概的技術邏輯如下。

發紅包後台操作:

1)在資料庫中增加一條紅包記錄,存儲到CKV,設置過期時間;

2)在Cache(可能是騰訊內部kv資料庫,基於內存,有落地,有內核態網路處理模塊,以內核模塊形式提供服務))中增加一條記錄,存儲搶紅包的人數N。

搶紅包後台操作:

1)搶紅包分為搶和拆:搶操作在Cache層完成,通過原子減操作進行紅包數遞減,到0就說明搶光了,最終實際進入後台拆操作的量不大,通過操作的分離將無效請求直接擋在Cache層外面。這里的原子減操作並不是真正意義上的原子減操作,是其Cache層提供的CAS,通過比較版本號不斷嘗試,存在一定程度上的沖突,沖突的用戶會放行,讓其進入下一步拆的操作,這也解釋了為啥有用戶搶到了拆開發現領完了的情況。

2)拆紅包在資料庫完成:通過資料庫的事務操作累加已經領取的個數和金額,插入一條領取流水,入賬為非同步操作,這也解釋了為啥在春節期間紅包領取後在余額中看不到。拆的時候會實時計算金額,其金額為1分到剩餘平均值2倍之間隨機數,一個總金額為M元的紅包,最大的紅包為 M * 2 /N(且不會超過M),當拆了紅包後會更新剩餘金額和個數。財付通按20萬筆每秒入賬准備,實際只到8萬每秒。

J. 微信紅包的隨機演算法是怎樣實現的

RT。我考慮了一個簡單的演算法:
比如100元,由10個人分,那麼平均一個人是10元錢。然後付款後,系統開始分份兒。
第一份:系統由0~10元之間隨機一個數,作為這一份的錢數,設x1。
第二份:剩下的錢(100-x1),系統由0~(100-x1)/(10-1)隨機一個數,作為這份的錢數,設x2
.。。。
第n份:剩下的錢(100-x1-x2-...-xn),系統由0~(100-x1-x2-...-xn-1)/(10-n)隨機一個數,作為這個份的錢數,設為xn

當用戶進來拿紅包的時候,系統由0~9之間隨機一個數,隨機到幾,就取第幾份紅包,然後將這個數存到list里。當之後的用戶抽到相同的隨機數時,則將這個數+1,如遇相同再+1,直至list滿,紅包發完。

閱讀全文

與隨機演算法怎麼實現的相關的資料

熱點內容
我的世界無盡貪婪奇點壓縮器 瀏覽:391
源碼資源免費分享網 瀏覽:683
批量qq號有效驗證源碼 瀏覽:511
本科程序員五年工資 瀏覽:899
創維電視櫃怎麼安裝app 瀏覽:850
可愛的程序員陸漓劇照 瀏覽:850
怎樣把截屏壓縮成300kb 瀏覽:224
dart文件加密 瀏覽:39
java對接攝像頭源碼 瀏覽:885
安卓項目開發實例附源碼 瀏覽:728
程序員蘋果全家桶 瀏覽:197
遠程命令阻塞 瀏覽:731
有網頁源碼怎麼查數據 瀏覽:100
win10下make編譯速度過慢 瀏覽:866
微機原理編譯環境 瀏覽:18
怎麼把圖紙轉換成pdf 瀏覽:541
安卓libcurl編譯64 瀏覽:905
手機app怎麼測速 瀏覽:275
中興gpon命令 瀏覽:885
python中取出字典key值 瀏覽:682