乙個集合對映成乙個陣列

2021-06-18 00:32:10 字數 1530 閱讀 2012

把集合對映成陣列的簡單的例子如下圖:

對映方法一:(點集來表示每個格(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...