gsl演算法
❶ 百度綠蘿演算法的演算法原理
網路綠蘿演算法的定義及原理:
網路綠蘿演算法的定義以及推出的意義:
網路綠蘿演算法是網路上線的一種搜索引擎反作弊的演算法。網路綠蘿演算法的推出,有效的控制了超鏈接作弊的行為,打擊的主要對象有三類:一是購買鏈接的網站、二是出售鏈接的網站、三是鏈接交易的中介網站。
2. 網路綠蘿演算法的原理:
鏈接title與所指向頁面內容索引的相關性的分析更加智能,不僅僅局限於網站的標題和meta及內容等。綠蘿演算法針對外鏈的傳遞綜合了A站點內容與B站點內容的相關性,A及B網站頁面內容品質,網站更新頻率,網站違規歷史記錄,網站的總權重值,從而綜合判斷,A頁面到B頁面的鏈接的權重傳遞是否有效,當大量的權重傳遞失效後網站的整站權重必然下降,關鍵詞排名消失在所難免;
權重傳遞失效,購買鏈接無效,「量變必定引發質變」,當spider發現大量的不良外鏈導出,即權重輸出,必定會給降低該站點的權重值。這次綠蘿演算法調整加大了pr輸出對整站影響的幅度。
網路綠蘿演算法的推出,告訴大家作戰要老老實實。歸根到底:重視用戶體驗網站才能發展的更好。
❷ SSL 證書的演算法有哪些
目前SSL證書的加密演算法主要有以下四種:
常用的對稱加密演算法如下:
演算法 優勢 劣勢
AES-128-GCM 支持 MAC 功能 實現復雜,較 CBC 運行速度慢
AES-128-CBC 實現簡單,運行速度快 不支持 MAC 功能
RC4 實現簡單,運行速度快 安全性低,已被驗證不安全
ChaCha20-Poly1305 針對移動端開發,運行速度快 推出時間較短
AES-GCM 是目前常用的分組加密演算法,但是其有一個缺點就是計算量大,導致性能和電量開銷比較大。為了解決這個問題,Intel 推出了名為 AES NI(Advanced Encryption Standard new instructions)的 x86 指令拓展集,從硬體上提供對 AES 的支持。對於支持 AES NI 指令的設備來說,使用 AES-GCM 無疑是最佳選擇。
而針對移動端,谷歌開發的ChaCha20-Poly1305是最好的選擇。
Chacha20-Poly1305 是由 Google 專門針對移動端 CPU 優化而採用的一種新式流式加密演算法,它的性能相比普通演算法要提高 3 倍,在 CPU 為精簡指令集的 ARM 平台上尤為顯著(ARM v8 前效果較明顯)。其中 Chacha20 是指對稱加密演算法,Poly1305 是指身份認證演算法。使用該演算法,可減少加密解密所產生的數據量進而可以改善用戶體驗,減少等待時間,節省電池壽命等。
由於其演算法精簡、安全性強、兼容性強等特點,目前 Google致力於全面將其在移動端推廣。
目前又拍雲提供 SSL 證書的申購、管理、部署等功能。與國際頂級 CA 機構合作,證書類型豐富,操作流程簡單方便,為用戶提供一站式 HTTPS 安全解決方案。免費版 SSL 證書 1小時內,付費版OV、EV SSL證書 3 天內即可完成申購簽發。並且一鍵完成 SSL 證書部署,即時開啟全站HTTPS服務開啟。
❸ sift演算法得到的特徵點如何用坐標描述
在我寫的關於sift演算法的前倆篇文章里頭,已經對sift演算法有了初步的介紹:九、圖像特徵提取與匹配之SIFT演算法,而後在:九(續)、sift演算法的編譯與實現里,我也簡單記錄下了如何利用opencv,gsl等庫編譯運行sift程序。
但據一朋友表示,是否能用c語言實現sift演算法,同時,盡量不用到opencv,gsl等第三方庫之類的東西。而且,Rob Hess維護的sift 庫,也不好懂,有的人根本搞不懂是怎麼一回事。
那麼本文,就教你如何利用c語言一步一步實現sift演算法,同時,你也就能真正明白sift演算法到底是怎麼一回事了。
❹ C++應該學什麼
大一學習的c++,工作之後也一直用的c++。
1. 涵蓋c++入門到精通的圖書列表
《The C programming language》必讀
《C++ Primer》,號稱是一本可以讓你從C或java程序員轉為一個真正的C++程序員的入門參考書,必讀。
《The C++ programming language》,C++之父,人稱B教主著作,在看過C++ primer後,應該可以跳章選讀。
《Think in c++》,網上說此書的中文版翻譯質量奇差,推薦看影印版,選讀。
《Effective c++》,類似 Effective java,講的是最佳實踐,程序員必讀。
《More effective c++》,上書的補充。
《The C++ standard library》,會寫C,不會用標准庫怎麼行。這就跟java程序員不會用java.util包一樣,必讀。
《Effective STL》,STL庫的最佳實踐。Effective C++作者又一力作,必讀。
《The annotated STL source》,STL源碼分析,這本書應該算是深入/精通類了,選讀。
《Generic programming and STL》,號稱C++編程里,就是跟模板,泛型打交道,那麼精通泛型是勢在必行。
《C++ Template》,C++模板編程,代碼復用的經驗之道,必讀。
《Exceptional C++》,跟Effective C++類似,屬於最佳實踐和難題解析,書中列出了許多應用場景和實例代碼供讀者揣摩,選讀。
《More Exceptional C++》,上書的補充。
《Exceptional C++ Style》,上上書的補充
《Inside The C++ Object Model》,有了上面這些書做鋪墊,那麼終於可以讀此神書了。它會帶你游覽C++對象模型的底層實現機制。讀完此書,任何C++代碼看起來如同行雲流水,必讀。
2. 優秀的C/C++開源項目(閱讀代碼)
OS:linux kernel LVS、Linux應用程序
DB:Mysql、PostgreSQL
Complier:VM、GCC
Framework:OpenSip、SipProxy、
Net:ACE(Java Mina、Netty)、TCP/IP、HTTP協議棧
Cache:Memcached、Redis、
Library:STL(java util package)、Boost、Qt(UI)、
balance:Apache、Nginx
GSL
地址:https://github.com/microsoft/GSL
Boost文檔
地址:https://www.boost.org/doc/libs/
wxWidgets官網
地址:http://wxwidgets.org/
gtkmm
地址:https://www.gtkmm.org/en/
CopperSpice
地址:https://www.copperspice.com/
Qt
地址:https://www.qt.io/Eigen
地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Documentation
Plot utils
地址:https://www.gnu.org/software/plotutils/
Asio
地址:https://think-async.com/Asio/
POCO
地址:https://pocoproject.org/
abseil
地址:https://abseil.io/
C++開源庫匯總列表
地址:https://en.cppreference.com/w/cpp/links/libs
除了這些開源項目,也可以找一些免費的公開課,那這里也推薦一個ACM金牌大佬講授的免費C++課程,可以去體驗一下:
學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣
已失效
3.C++語法講解
語言基礎
詳細介紹變數、表達式、語句、指針、數組、流程式控制制、函數、文件組織等。抽象機制 - 面向對象編程
深入講解C++的抽象機制,封裝(類)、繼承、多態;操作符重載、函數對象、異常處理等。模板 - 泛型編程
詳細介紹C++的模板機制,類模板、函數模板、模板特化等方面的內容。引用和指針:為什麼引用很重要
const關鍵字:為什麼const很重要
名字空間 (namespace)
關於C++對象
內置類型的對象,如int、double對象,自定義類型的對象對象類型的定義
關鍵字class和struct
類成員:成員函數和數據成員
靜態數據成員
成員的訪問控制
對象的size
關於this指針
onst成員函數、const究竟修飾什麼
mutable數據成員
4種特殊成員函數:constructor、destructor、 constructor、operator=
對象的構造、初始化列表
對象的析構
對象的復制
什麼情況下有必要顯式定義4種特殊函數
C++對象生命周關於C++中操作符重載機制
重要操作符重載
算術運算:+, -, *, /, %, ++, --, ...
關系運算:>, <, ==, !=
下標存取:[ ]
函數調用:(),函數對象
類型轉換、單參數構造函數與隱式轉換、阻止隱式轉換 -- explicit關鍵字友元與成員
基類與派生類
再談對象的構造與析構
虛函數、純虛函數
派生類的內存布局、虛函數表
多態、多態類型、如何體現多態
虛析構、為什麼虛析構很重要
多繼承
虛繼承與虛基類
對基類的訪問、public / protected / private繼承
Down cast:static_cast<>和dynamic_cast<>
運行期類型識別 (RTTI)
C++語言機制提供了完整的OOP支持
超越繼承
OOP若干法則和設計模式
《C++ Primer》
最新版本:第三版(第四版國外已上架, 國內一些網上書店也在預訂中)
適合有豐富C經驗,缺乏C++經驗的。不過我個人一直認為此書帶著過於強烈的C語言的痕跡,對於C++的學習未必是 好事。
《The C++ Programming Language》/《C++程序設計語言》
最新版本:第三版特別版
簡稱 TC++PL,有其他語言的豐富經驗的。(也有人簡稱之為「TCPL」,但需與另一本《The C Programmer Language》區分開來)
《Essential C++》
《Accelerated C++》
這兩本薄一些,都是不錯的選擇。《Accelerated C++》本人沒有讀過,從各方面的評價來看,完全值得推薦。
以上幾本書都有相應的中文版,而且翻譯的質量都不錯。上面的書未必都需要讀一遍,但無論如何,TC++PL是應該閱讀的。
《Effective C++》
最新版本:第二版(第三版國外已上架,國內一些網上書店也在預訂中)
簡稱EC。C++程序員必讀!很多時候,我們說C++聖經不是指TC++PL,而是這一本。《The Pragmatic Programmer》一書中寫到:「一旦你發現自己要參與C++項目的開發,趕快跑(不要走)到書店去購買Scott Mayer的《Effective C++》,可能還要《More Effective C++》」。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 編程規范》
個人認為此書應為C++程序員必備的案頭書。幾乎Effective系列和Exceptional系 列都在這里得到了總結。最新的模版、異常的業界經驗都在這里的到了體現。可能的唯一缺陷就是對一個新手而言,關於「為什麼這么做」的問題,解釋的不夠。
我 的看法是:如果你不理解其中的條款,記憶,並且照做;如果你理解其中的條款,我猜你一定會同意書中的觀點。我認為這本書中的內容至少在2009年以前都不 會過時,人們將廣為傳誦它制定的101條戒律。
還不知道他的簡稱,也許「101」會成為一個候選者?
提到《Effective C++》,那麼另外三本書一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新書《Exceptional C++ Style》也是值得一看的好書。
上 述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。並且,在將來反復閱讀這幾本書。
4.深入c++面向對象
4.1、從C到C++
4.2、深入C++對象
4.3、操作符重載
4.4、面向對象基礎 -- 繼承
4.5、關於繼承更多的話題
4.6、C++與面向對象設計
5.C++泛型編程與STL
5.1、C++ 模板機制
5.2、STL 概要
5.3、STL容器
5.4、STL迭代
5.5、STL演算法
5.6、預與定義STL數對象
5.7、STL適配器
6. C++進階
《Thinking in C++》/《C++編程思想》
這本書及其中文版傳言好壞都有,沒有認真看過,不做評價,如果確有興趣,不妨嘗試 一下該書。
以下幾本書基本上涉及的都是語言本身,大體上可以按照以下的順序閱讀。
《C++必知必會》
如果早一年,這本書將是重量級的,然而它被101和《Exceptional C++ Style》蓋過一頭。
《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序設計陷阱》
這又是一本我未曾讀過,而且廣受好評的書。
《STL 源碼剖析》
這本書我剛到手,就被人"借"走,以至於到現在也沒有看過。看過這本書的朋友,可以給一個合適的評價。
7. C++進階之數據結構基礎
這是所有編程語言中最應該學習的部分,程序組成的基礎之一。
順序存儲、鏈式存儲、循環鏈表;
雙向鏈表、棧(順序和鏈式)、隊列(順序和鏈式);
棧的應用、樹基本概念及遍歷、二叉樹;
排序演算法、並歸演算法、選擇、插入、快速、希爾。
以上這些內容你知道嗎?
8. C++進階之UI界面開發
掌握QT類庫構架,圖形界面開發模型;
掌握QT開發技巧,消息機制,圖形處理;
掌握QT網路編程,UDP,TCP使用方式;
掌握QT文件處理方式,序列化;
掌握QT在windows,linux,ios,android不同平台下的移植技術。
9. C++進階之Unix/Linux網路伺服器
掌握Unix/Linux平台開發方式;
熟練使用系統調用;
熟練Unix/Linux內存管理,進程,線程調度;
熟悉網路伺服器開發方式,熟練編寫TCP,UCP網路服務程序;
掌握同步/非同步IO模型在網路編程中的使用方式。
10.C++進階之資料庫開發
掌握SQL語言的實用技巧。Oracle,MySQL資料庫的使用方式。
如果你能熟練掌握以上列出的技能,具備解決復雜問題和技術難點的能力,而且你能獨立開發一些比較復雜的功能模塊,那麼很榮幸地告訴你,你已經達到中級水平,薪資過萬對你來說簡直是小菜一碟。
11.C++標准參考
C++ reference
地址:https://en.cppreference.com/w/
C++ Coding Standard
地址:http://www.possibility.com/Cpp/CppCodingStandard.html
Standard C++
地址:https://isocpp.org/
State of C++ Evolution
地址:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2597.html
The C++ Resources Network
地址:http://www.cplusplus.com/
Draft C++ Standard: Contents
地址:http://eel.is/c++draft/
需要資料私聊我
❺ 誰有粒子濾波C++實現的代碼
程序流程:
1.命令行參數處理 ->
2.設置隨機數生成器環境,創建隨機數生成器、並且對其初始化。->
3.初始化視頻句柄 ->
4.取視頻中的一幀進行處理 ->
1)GRB->HSV
2)保存當前幀在frames
3) 判斷是否為第一幀,
若是則,
(1)忙等用戶選定欲跟蹤的區域
(2)計算相關區域直方圖
(3)得到跟蹤粒子
若不是則,
(1)對每個粒子作變換,並計算每個粒子的權重
(2)對粒子集合進行歸一化
(3)重新采樣粒子
4)畫出粒子所代表的區域
5.釋放圖像
OpenCV學習——物體跟蹤的粒子濾波演算法實現之命令行參數處理
void arg_parse( int argc, char** argv )
{
int i = 0;
pname = remove_path( argv[0] );
while( TRUE )
{
char* arg_check;
int arg = getopt( argc, argv, OPTIONS );
if( arg == -1 )
break;
switch( arg )
{
case 'h':
usage( pname );
exit(0);
break;
case 'a':
show_all = TRUE;
break;
case 'o':
export = TRUE;
break;
case 'p':
if( ! optarg )
fatal_error( "error parsing arguments at -%c\n" \
"Try '%s -h' for help.", arg, pname );
num_particles = strtol( optarg, &arg_check, 10 );
if( arg_check == optarg || *arg_check != '\0' )
fatal_error( "-%c option requires an integer argument\n" \
"Try '%s -h' for help.", arg, pname );
break;
default:
fatal_error( "-%c: invalid option\nTry '%s -h' for help.",
optopt, pname );
}
}
if( argc - optind < 1 )
fatal_error( "no input image specified.\nTry '%s -h' for help.", pname );
if( argc - optind > 2 )
fatal_error( "too many arguments.\nTry '%s -h' for help.", pname );
vid_file = argv[optind];
}
作者使用Getopt這個系統函數對命令行進行解析,-h表示顯示幫助,-a表示將所有粒子所代表的位置都顯示出來,-o表示輸出tracking的幀,-p number進行粒子數的設定,然後再最後指定要處理的視頻文件。
OpenCV學習——物體跟蹤的粒子濾波演算法實現之RGB->HSV
IplImage* bgr2hsv( IplImage* bgr )
{
IplImage* bgr32f, * hsv;
bgr32f = cvCreateImage( cvGetSize(bgr), IPL_DEPTH_32F, 3 );
hsv = cvCreateImage( cvGetSize(bgr), IPL_DEPTH_32F, 3 );
cvConvertScale( bgr, bgr32f, 1.0 / 255.0, 0 );
cvCvtColor( bgr32f, hsv, CV_BGR2HSV );
cvReleaseImage( &bgr32f );
return hsv;
}
程序現將圖像的像素值歸一化,然後使用OpenCV中的cvCvtcolor函數將圖像從RGB空間轉換到HSV空間。
OpenCV學習——物體跟蹤的粒子濾波演算法實現之設定隨機數
gsl_rng_env_setup();//setup the enviorment of random number generator
rng = gsl_rng_alloc( gsl_rng_mt19937 );//create a random number generator
gsl_rng_set( rng, time(NULL) );//initializes the random number generator.
作者使用GSL庫進行隨機數的產生,GSL是GNU的科學計算庫,其中手冊中random部分所述進行隨機數生成有三個步驟:
隨機數生成器環境建立,隨機數生成器的創建,隨機數生成器的初始化。
OpenCV學習——物體跟蹤的粒子濾波演算法實現之計算選定區域直方圖
histogram** compute_ref_histos( IplImage* frame, CvRect* regions, int n )
{
histogram** histos = malloc( n * sizeof( histogram* ) );
IplImage* tmp;
int i;
for( i = 0; i < n; i++ )
{
cvSetImageROI( frame, regions[i] );//set the region of interest
tmp = cvCreateImage( cvGetSize( frame ), IPL_DEPTH_32F, 3 );
cvCopy( frame, tmp, NULL );
cvResetImageROI( frame );//free the ROI
histos[i] = calc_histogram( &tmp, 1 );//calculate the hisrogram
normalize_histogram( histos[i] );//Normalizes a histogram so all bins sum to 1.0
cvReleaseImage( &tmp );
}
return histos;
}
程序中先設置了一個類型為histogram的指向指針的指針,是histogram指針數組的指針,這個數組是多個選定區域的直方圖數據存放的位置。然後對於每一個用戶指定的區域,在第一幀中都進行了ROI區域設置,通過對ROI區域的設置取出選定區域,交給函數calc_histogram計算出直方圖,並使用normalize_histogram對直方圖進行歸一化。
計算直方圖的函數詳解如下:
histogram* calc_histogram( IplImage** imgs, int n )
{
IplImage* img;
histogram* histo;
IplImage* h, * s, * v;
float* hist;
int i, r, c, bin;
histo = malloc( sizeof(histogram) );
histo->n = NH*NS + NV;
hist = histo->histo;
memset( hist, 0, histo->n * sizeof(float) );
for( i = 0; i < n; i++ )
{
img = imgs[i];
h = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 1 );
s = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 1 );
v = cvCreateImage( cvGetSize(img), IPL_DEPTH_32F, 1 );
cvCvtPixToPlane( img, h, s, v, NULL );
for( r = 0; r < img->height; r++ )
for( c = 0; c < img->width; c++ )
{
bin = histo_bin( pixval32f( h, r, c ),
pixval32f( s, r, c ),
pixval32f( v, r, c ) );
hist[bin] += 1;
}
cvReleaseImage( &h );
cvReleaseImage( &s );
cvReleaseImage( &v );
}
return histo;
}
這個函數將h、s、 v分別取出,然後以從上到下,從左到右的方式遍歷以函數histo_bin的評判規則放入相應的bin中(很形象的)。函數histo_bin的評判規則詳見下圖:
|----|----|----|。。。。|----|------|------|。。。。|-------|
1NH 2NH 3NH NS*NH NS*NH+1 NS*NH+2 NS*NH+NV
OpenCV學習——物體跟蹤的粒子濾波演算法實現之初始化粒子集
particle* init_distribution( CvRect* regions, histogram** histos, int n, int p)
{
particle* particles;
int np;
float x, y;
int i, j, width, height, k = 0;
particles = malloc( p * sizeof( particle ) );
np = p / n;
for( i = 0; i < n; i++ )
{
width = regions[i].width;
height = regions[i].height;
x = regions[i].x + width / 2;
y = regions[i].y + height / 2;
for( j = 0; j < np; j++ )
{
particles[k].x0 = particles[k].xp = particles[k].x = x;
particles[k].y0 = particles[k].yp = particles[k].y = y;
particles[k].sp = particles[k].s = 1.0;
particles[k].width = width;
particles[k].height = height;
particles[k].histo = histos[i];
particles[k++].w = 0;
}
}
i = 0;
while( k < p )
{
width = regions[i].width;
height = regions[i].height;
x = regions[i].x + width / 2;
y = regions[i].y + height / 2;
particles[k].x0 = particles[k].xp = particles[k].x = x;
particles[k].y0 = particles[k].yp = particles[k].y = y;
particles[k].sp = particles[k].s = 1.0;
particles[k].width = width;
particles[k].height = height;
particles[k].histo = histos[i];
particles[k++].w = 0;
i = ( i + 1 ) % n;
}
return particles;
}
程序中的變數np是指若有多個區域n,則一個區域內的粒子數為p/n,這樣粒子的總數為p。然後程序對每個區域(n個)中p/n個粒子進行初始化,三個位置坐標都為選定區域的中點,比例都為1,寬度和高度為選定區域的高度。然後又跑了個循環確定p個粒子被初始化。
OpenCV學習——物體跟蹤的粒子濾波演算法實現之粒子集合變換
particle transition( particle p, int w, int h, gsl_rng* rng )
{
float x, y, s;
particle pn;
x = A1 * ( p.x - p.x0 ) + A2 * ( p.xp - p.x0 ) +
B0 * gsl_ran_gaussian( rng, TRANS_X_STD ) + p.x0;
pn.x = MAX( 0.0, MIN( (float)w - 1.0, x ) );
y = A1 * ( p.y - p.y0 ) + A2 * ( p.yp - p.y0 ) +
B0 * gsl_ran_gaussian( rng, TRANS_Y_STD ) + p.y0;
pn.y = MAX( 0.0, MIN( (float)h - 1.0, y ) );
s = A1 * ( p.s - 1.0 ) + A2 * ( p.sp - 1.0 ) +
B0 * gsl_ran_gaussian( rng, TRANS_S_STD ) + 1.0;
pn.s = MAX( 0.1, s );
pn.xp = p.x;
pn.yp = p.y;
pn.sp = p.s;
pn.x0 = p.x0;
pn.y0 = p.y0;
pn.width = p.width;
pn.height = p.height;
pn.histo = p.histo;
pn.w = 0;
return pn;
}
程序使用動態二階自回歸模型作為基本變換思路,變換的對象有坐標x,坐標y,和比例s。變換的x和y要符合在width和height之內的條件。
OpenCV學習——物體跟蹤的粒子濾波演算法實現之粒子集重新采樣
particle* resample( particle* particles, int n )
{
particle* new_particles;
int i, j, np, k = 0;
qsort( particles, n, sizeof( particle ), &particle_cmp );
new_particles = malloc( n * sizeof( particle ) );
for( i = 0; i < n; i++ )
{
np = cvRound( particles[i].w * n );
for( j = 0; j < np; j++ )
{
new_particles[k++] = particles[i];
if( k == n )
goto exit;
}
}
while( k < n )
new_particles[k++] = particles[0];
exit:
return new_particles;
}
程序先使用C標准庫中的qsort排序函數,按照權重,由大到小將原粒子集排序。然後將權重大的在新的粒子集中分配的多一點。
OpenCV學習——物體跟蹤的粒子濾波演算法實現之權重歸一化
void normalize_weights( particle* particles, int n )
{
float sum = 0;
int i;
for( i = 0; i < n; i++ )
sum += particles[i].w;
for( i = 0; i < n; i++ )
particles[i].w /= sum;
}
❻ 什麼是電子書..是什麼功能..
不同於大多數電子書,e人e本T3的屏幕是全彩色的~能夠減輕閱讀者對於單色畫面的視覺疲勞感。5種字體大小變化,既支持電子筆滑動翻閱,也支持手指翻閱,還原了真實的翻書體驗。
❼ 電子書是什麼
電子書又稱e-book,是將書的內容製作成電子版後,以傳統紙制書籍1/3至1/2的價格在網上出售。購買者用信用卡或電子貨幣付款後,即可下載使用專用瀏覽器在計算機上離線閱讀。電子圖書不同於現在網上的免費線上閱讀,它是與紙製版同步推出的最新書籍,所以閱讀它要支付一定的費用;與光碟圖書不同,e-book是基於網際網路購買。
❽ 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(不是素數)等等。