當楊輝三角遭遇百萬行數量級時

2021-05-18 07:53:07 字數 1161 閱讀 5981

一直以為,楊輝三角只是乙個很小兒科的問題……直到那一天,我遇見了它……

輸出楊輝三角的前一百萬行,假設螢幕足夠寬。

第一次初識它時,只覺得天空很藍,雲淡風清。後來叫了gcc和vc過來和它認識了一下以後,狂風大作,昏天黑地。

在我所了解到的知識中,楊輝三角的輸出演算法比較簡單的有兩種,一種是需要申請陣列的,用前一行的值計算出下一行的值;另一種是不需要申請陣列的,直接根據行號來得出每乙個數。輸出10行的簡單demo分別如下:

//需要申請陣列的

int a[10] = ;

a[0] = 1;

a[1] = 1;

cout << 「1″ << endl;

cout << 「1 1″ << endl;

for(int i = 2; i < 10; i++)

cout << 「1″ << endl;

}

這是第一種,需要申請乙個行號那麼大的陣列。

//不需要申請陣列的

for(int i = 1; i <= 10; i++)

cout << endl;

}

這種不需要申請陣列,每次根據行號來計算每乙個數,只需要儲存個中間變數就行了。

本來以為,我只要丟擲上面兩種方面中隨便一種,就可以秒殺此題的,後來才發現,一切都不是那麼簡單的……

分析:一、棧空間的限制。分配乙個int[1000000]在棧中是不行的,經過我的測試,在gcc下,如果main函式裡面除了這個陣列和乙個迴圈變數外什麼其它變數都不申請,最多可以申請int[520635],否則將產生段錯誤;而在vc下,這個數字更是將減少到258651。這應該就是預設分配的乙個函式的棧空間大小,估算一下gcc編譯器下應該是2mb,而vc下應該是1mb。所以分配乙個1000000的int至少需要擴容棧空間後才能做,或者,將其分配到堆空間或靜態區。

二、資料溢位。在楊輝三角計算到第31行時,int型資料就已經溢位,這樣一樣,就算我申請為__int64等型別,那也肯定是過不了百行的,資料用什麼樣的資料型別或結構儲存很成問題。

眼下,這兩個問題都還在構思中,沒有什麼太好的解決方案,各位看官如果有什麼好想法交流下哈……

也許,繼續思考會讓我認識到更多的問題……

待續。期望能將它解決掉。

python楊輝三角 楊輝三角I II

給定乙個非負整數 numrows,生成楊輝三角的前 numrows 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 5 輸出 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1 可以一行一行錯位加,當然這裡提供更簡便的方法。任取一行描述 1,2,1 如何得到 1,3,3,1 ...

Java 楊輝三角

public class yanghui 生成指定行數的楊輝三角形 param lines 楊輝三角形的行數 public void printyanghui int lines if lines 30 int line new int lines int maxlen getmaxlen line...

輸出楊輝三角

程式的版權和版本宣告部分 檔名稱 fibnacci.cpp 作 者 單虹毓 完成日期 2013 年 12 月 4 日 版本號 v1.0 輸入描述 無 問題描述 楊輝三角 程式輸出 1 第0列和對角線上的元素都為1。程式輸出 2 除第0列和對角線上的元素以外,其它元素的值均為前一行上的同列元素和前一列...