把集合對映成陣列的簡單的例子如下圖:
對映方法一:(點集來表示每個格(row,column))
(1,1)
(1,2)
(2,1)
(2,2)
(3,1)
(3,2)
對映方法二:(數字來表示每個格,pos_num)12
3456
789 而通過觀察這兩種的對映方法是有關聯的,關係式如下:
pos_num=(row-1)*3+column
反過來的對應關係:
row=pos_num/3(向上取整)
column=pos_num%3
這種對映方法的一種直觀表現,我認為可以用排隊來形式表現。
(1,1)(1,2)(2,1)(2,2)(3,1)(3,2)
1 2 3 4 6 7 8 9
a)先根據row佔位,應為一共有3行,而且沒行的元素一樣,所以把陣列3等分成小片.讓row來佔每個片的頭乙個位置(first_pos_num=(row-1)*3+1)。12
3{12 3}
{45 6}{7
8 9}
b)再用column來填充,column也可以表示從片頭的偏移(first_pos_num+column(offset))。
(1,1)
(1,2)
(1,3){12
3} 這種對映原理簡單,但是在程式設計應用確實非常廣泛的。
示例一:已知有個rand7()的函式,返回1到7隨機自然數,讓利用這個rand7()構造rand10() 隨機1~10。
根據概率論,7個數來構造10個數的隨機函式是不可能,因為樣本空間明顯不夠。所以第一步就是增加樣本空間。一種很簡單是通過兩次的rand7(),我們可以得到乙個大小為49的集合。
{(1,1),(1,2),(1,3)……(7,7)}
接下來就是把這49個元素等分重組成10個小集合s1,s2,s3,s4,s5,s6,s7,s8,s9,s10.每個集合對乙個1~10之間的乙個數。接下來的問題又轉化成了怎麼等分?49怎麼也不能整除10,但是要想概率一樣就必須要每個小集合的元素一樣。所以只能拋棄9個元素,剩下40,然後每個小集合擁有4個元素。拋棄那些元素,和怎麼劃分的方法很多。我覺得很秒的一種應用上述我提到的集合對映成陣列的方式。
第一步,是先把原來的49個點,對映成數。對映公式(和上面的稍有不同):
num=(px-1)*7+(py-1)
{(1,1),(1,2),(1,3)……(7,7)} ==》{0,1,2,3,4,5……48}
拋棄40~48這個幾個9個數,剩下0~39這40個數,然後順序分割s1=,s2=,s3=……
因為轉換成了數,所以可以利用數的簡單除法計算就可以判定屬於那個小集合。
set_num=num/4+1
整個程式:
#includeint rand7()
int rand10()
while(px*7+py>40);
return (px*7+py)/4+1;
}
將乙個陣列追加到別乙個陣列
問題 將乙個陣列追加到別乙個陣列 方案 1 使用array merge 在使用這個合併陣列時如果使用數字鍵,那麼索引會重新編號.如果使用字串鍵,則會導致第二個陣列中的鍵 覆蓋第乙個陣列中的同名鍵 此時第乙個陣列中的值也就消失了 如果是兩種鍵則會表現出上述兩種特徵.r array 1 2 dd 3 4...
php 清空乙個陣列 php如何刪除乙個陣列
php如何刪除乙個陣列2020 07 10 01 16 35 php刪除乙個陣列的方法 1 使用unset函式刪除乙個陣列元素,且保持原有索引不變 2 使用 array splice 函式刪除乙個陣列元素,不保持索引 3 使用 array diff 函式,按值刪除多個元素,保持索引。php刪除陣列 ...
判斷乙個陣列是否包含另乙個陣列
function iscontainarr parent,child let parent 1,2,3,6,5,4 let child 1,3,4,6 let child2 1,3,4,6,7 console.log iscontainarr parent,child true console.lo...