當前位置:首頁 » 操作系統 » 閉包演算法

閉包演算法

發布時間: 2022-06-09 19:56:43

『壹』 java 中到底什麼叫閉包 另外,快排的演算法我懂, 但到底什麼樣的程序才叫快排呢……望指點~

什麼是閉包

閉包的概念,不同資料給出了好幾種。

閉包:包含了自由(未綁定)變數的代碼塊,這些變數不是在這個代碼塊中或者任何全局上下文中定義的,而是定義代碼塊的環境中定義的。也就是下面兩部分:

要執行的代碼塊(由於自由變數存在,相關變數引用沒有釋放)
為自由變數提供綁定的計算環境(作用域)

閉包:一種函數對象或者匿名函數,作為參數傳遞,可以動態的創建與返回

閉包:具有閉合作用域的匿名函數

第一層理解:閉包是具有特別作用域規則且可以作為參數的代碼塊

3.times {puts "Inside the times method."}

Results:
Inside the times method.
Inside the times method.
Inside the times method.

第二層理解:給上述的代碼塊擴展一個參數列表,使方法或函數可以與這個代碼通訊

['lions', 'tigers', 'bears'].each {|item| puts item}

Results:
lions
tigers
bears

第三層理解:將這樣的代碼塊作為參數傳遞

animals = ['lions', 'tigers', 'bears'].collect {|item| item.upcase}
puts animals.join(" and ") + " oh, my."

LIONS and TIGERS and BEARS oh, my.

第四層理解:定義代碼塊的環境的名稱空間和使用它的函數之間的作用域本質上是一個作用域,即:作用域是閉合的

tax = 0.08
prices = [4.45, 6.34, 3.78]
tax_table = prices.collect {|price| {:price => price, :tax => price * tax}}
tax_table.collect {|item| puts "Price: #{item[:price]} Tax: #{item[:tax]}"}

Results:
Price: 4.45 Tax: 0.356
Price: 6.34 Tax: 0.5072
Price: 3.78 Tax: 0.3024

按照SCIP定義:閉包就是一個攜帶有本地狀態的函數

我對閉包的理解

閉包具有函數的性質
能完成一定的功能的代碼塊
能夠預定義參數和引用作用域中的參數
能夠在需要的地方被調用

閉包可以看成對象
能夠作為參數傳遞

作用域的作用
作用域設定一個運行空間,但是作用域本身也很無賴,作用域知道自己能幹什麼,但是不知道具體要怎麼做。只要作用域真正要用的時候,見到了閉包裡面的代碼塊,作用域才算功德圓滿了。這就是所謂「動態」的一種體現吧
作用域決定了閉包中代碼塊的使用方法
作用域決定了閉包中預設參數的本質,如參數的個數,類型

疑問:還沒有搞清楚一個問題,在這里請教一下知道的

在閉包裡面作用域提供的參數 是怎麼和閉包裡面預設的參數一一對應起來的呢?見下面代碼

printMapClosure = {| key, value| puts key + "=" + value }
[ "yue" : "wu", "lane" : "burks", "sudha" : "saseethiaseeleethialeselan" ].each(printMapClosure)
result:yue=wu
lane=burks
sudha=saseethiaseeleethialeselan

我想知道為什麼 key就對應yue,lane,sudha呢?而value就會對應wu,burks,sasee...呢?

作用域決定了閉包的最終處理結果

總結:閉包是一種被作用域限制的函數對象

另附:未來Java可能會採用的兩種閉包形式

BGGA方案

說明:擴展了類型系統,引入了 function 類型,即函數都帶有一個類型參數列表、返回類型和 throws 子句。

代碼:完成求平方和
sumOfSquares = mapRece(myBigCollection,
{ Double x => x * x },
{ Double x, Double y => x + y });

CICE方案
說明:通過定義更簡化的內部類來完成對閉包的支持

代碼:完成求平方和
Double sumOfSquares = mapRece(myBigCollection,
UnaryFunction<Double>(Double x) { return x*x; },
BinaryFunction<Double, Double>(Double x, Double y) { return x+y; });

『貳』 資料庫閉包的計算

閉包就是由一個屬性直接或間接推導出的所有屬性的集合,例如:

f={a->b,b->c,a->d,e->f}

由a可直接得到b和d,間接得到c,則a的閉包就是{a,b,c,d}

『叄』 Warshall演算法求傳遞閉包,Python語言~

def __warshall(self, a):
assert (len(row) == len(a) for row in a)
n = len(a)
#請在下面編程實現Roy-Warshall求傳遞閉包的演算法
#參數a:為一個關系矩陣
# 請刪除pass後編程實現該方法功能
for i in range(n) :
for j in range(n):
if a[j][i] == 1:
for k in range(n):
a[j][k] = a[j][k] | a[i][k]
# 請在上面編寫程序,不要修改下面代碼
return a

『肆』 二元關系的關系的閉包

設R是非空集合A上的關系, R的自反(對稱或傳遞)閉包是A上的關系R' ,滿足
(1) R'是自反的(對稱的或傳遞的)
(2)
(3) 對A上任何包含R的自反(對稱或傳遞)關系R''有
一般將R的自反閉包記作r(R),對稱閉包記作s(R) ,傳遞閉包記作t(R)。
下列給出了構造閉包的方法:對於有限集合A 上的關系R ,存在一個正整數s,使得 ,且s不超過A的元素數。
求傳遞閉包是圖論中一個非常重要的問題,例如給定了一個城市的交通地圖,可利用求傳遞閉包的方法獲知任意兩個地點之間是否有路相連通。可以直接利用關系矩陣相乘來求傳遞閉包,但那樣做復雜度比較高;好一點的辦法是在計算矩陣相乘的時候用分治法降低時間復雜度;但最好的方法是利用基於動態規劃的Floyd-Warshall演算法來求傳遞閉包。

『伍』 設有函數依賴集F={AB->CE,A->C,GP->B,EP->A,CDE->P,HB->P,D->HG,ABC->PG},計算屬性集D關於F的閉包D

首先,求閉包的演算法:
輸入:有限的屬性集合U,它上面的函數依賴集F,
和U的一個子集X。
輸出:X關於F的屬性閉包X+ 。
方法: (1)置初始X(0)= X(1)=X;
(2)如果X(0)X(1),置X(0)=X(1),否則轉向(4);
(3)對F中的每一個函數依賴YZ,若 YX(1),
置X(1)=X(1)Z,並轉(2) ;
(4) 輸出X(1),即為X+ 。演算法終止。
下面,利用上面演算法解題,
X(0)=Φ,X(1)=D
因為x(0) ≠x(1),所以令X(0)=D
由D->HG得X(1)=D U HG=DHG
因為x(0) ≠x(1),所以令X(0)=DHG
因為此時沒有關於DHG的函數依賴了,所以X(1)=DHG不變
此時X(0)= X(1)所以D的閉包等於DHG

以上為初學者必須掌握的基本演算法(應該還有其他的,我們老師只講了這種滴~)
其實根本不用這么復雜,熟悉了可以直接寫結果
X(0)=D
由D->HG得X(1)=D U HG=DHG

因為此時沒有關於DHG的函數依賴了,所以X(2)=DHG不變
X(1)=X(2)循環結束,D的閉包等於DHG
(望採納哦~~~~~)

『陸』 離散數學中傳遞閉包怎麼求 通俗一點

方法:warshall法,即運行n次,每次使得MR[n][i],MR[i][n]都為1時使得MR[i][j]為1,否則還是為MR[i][j]。
傳遞閉包的計算過程一般可以用Warshell演算法描述: 
For 每個節點i Do
For 每個節點j Do
If j能到i Then
For 每個節點k Do
a[j, k] := a[j, k] Or ( a[j, i] And a[ i, k] ) 
其中a數組為布爾數組,用來描述兩個節點是否相連,可以看做一個無權圖的鄰接矩陣。演算法過程跟Floyd很相似,三重循環,枚舉每個中間節點。不過傳遞閉包只需要求出兩個節點是否相連,而不用求其間的最短路徑長。
傳遞性:對於一個節點i,如果j能到i,i能到k,那麼j就能到k。求傳遞閉包,就是把圖中所有滿足這樣傳遞性的節點都弄出來,計算完成後,就知道任意兩個節點之間是否相連。 
傳遞閉包的定義:R』是R(不具有傳遞性質)變動最少的步驟得到的具有傳遞性質的關系。
(6)閉包演算法擴展閱讀
演算法實例:
#include<stdio.h>
#define
 N
10 
int
judge(int
k,int
i,int
j)
{
if(i==1
&&
j==1){
return
1;
}
return
k;
}
void
warShall(int
MR[N][N],int
n)
{
for(int
k=0;k<n;k++){
for(int
i=0;i<n;i++){
for(int
j=0;j<n;j++){
if(i!=k
||
j!=k){
MR[i][j]=judge(MR[i][j],MR[k][j],MR[i][k]);
}
}
}
}

int
main()
{
int
MR[10][10];
int
mul;
scanf("%d",&mul);
for(int
i=0;i<mul;i++){
for(int
j=0;j<mul;j++){
scanf("%d",&MR[i][j]);
}
}
printf("求傳遞閉包為:\n");
warShall(MR,mul);
for(int
i=0;i<mul;i++){
for(int
j=0;j<mul;j++){
printf("%d
",MR[i][j]);
}
printf("\n");
}
return
0;
}
運行結果:
參考資料:網路-傳遞閉包

『柒』 求計算機求解關系R的傳遞閉包 C語言演算法

傳遞閉包,最簡單的技術是採用 【弗洛伊德演算法】

Floyd-Warshall演算法(Floyd-Warshall algorithm)是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。

Floyd-Warshall演算法的時間復雜度為O(N3),空間復雜度為O(N2)。

Floyd-Warshall演算法的原理是動態規劃。

設Di,j,k為從i到j的只以(1..k)集合中的節點為中間節點的最短路徑的長度。

1.若最短路徑經過點k,則Di,j,k = Di,k,k − 1 + Dk,j,k − 1;
2.若最短路徑不經過點k,則Di,j,k = Di,j,k − 1。
因此,Di,j,k = min(Di,k,k − 1 + Dk,j,k − 1,Di,j,k − 1)。
在實際演算法中,為了節約空間,可以直接在原來空間上進行迭代,這樣空間可降至二維。

代碼請見:

『捌』 資料庫屬性集合的閉包怎麼求

計算屬性集閉包X+的演算法如下:
輸入:X,F
輸出:
X+
迭代演算法的步驟:

選取X+的初始值為X
,即X+={X};

計算X+,
X+={XZ}
,其中Z要滿足如下條件:
YX+,且F中存在一函數依賴Y→Z。實際上就是以X+中的屬性子集作為函數依賴的決定因素,在F中搜索函數依賴集,找到函數依賴的被決定屬性Z放到X+中。

判斷:如果X+沒有變化?或X+等於U?則X+就是所求的結果,演算法終止。否則轉②。
因為U是有窮的,所以上述迭代過程經過有限步驟之後就會終止。

『玖』 資料庫原理中屬性集的閉包及其演算法重要嗎

考慮到安全性的話
是很重要的
比如說
方法
A
{
屬性
a
方法
B{
a=1;
return
a;
}
}
這樣
不管外部如何更改屬性a但調用方法A返回的始終是1
這樣保證了數據不會被外部篡改

『拾』 資料庫閉包怎麼計算

已知關系模式R<U,F>,其中
U={A,B,C,D,E};
F={AB→C,B→D,C→E,EC→B,AC→B}。
求(AB)F+ 。
解 設X(0)=AB;
(1)計算X(1): 逐一的掃描F集合中各個函數依賴,
找左部為A,B或AB的函數依賴。得到兩個:
AB→C,B→D。
於是X(1)=AB∪CD=ABCD。
(2)因為X(0)≠ X(1) ,所以再找出左部為ABCD子集的那些函數依賴,又得到AB→C,B→D, C→E,AC→B,
於是X(2)=X(1)∪BCDE=ABCDE。
(3)因為X(2)=U,演算法終止
所以(AB)F+ =ABCDE。

求屬性集X(X  U)關於U上的函數依
賴集F 的閉包XF+
輸入:X,F
輸出:XF+
步驟:
(1)令X(0)=X,i=0
(2)求B,這里B = { A |( V)(  W)(V→WF
∧V  X(i)∧A W)};
(3)X(i+1)=B∪X(i)
(4)判斷X(i+1)= X (i)嗎?
(5)若相等或X(i)=U , 則X(i)就是XF+ ,
演算法終止。
(6)若否,則 i=i+l,返回第(2)步。
對於演算法6.l, 令ai =|X(i)|,{ai }形成一個步長大
於1的嚴格遞增的序列,序列的上界是 | U |,因
此該演算法最多 |U| - |X| 次循環就會終止。

熱點內容
androidcursor遍歷 發布:2024-11-02 00:27:40 瀏覽:767
網易我的世界地皮伺服器大全 發布:2024-11-02 00:24:20 瀏覽:964
光宇國際服怎麼安卓轉ios 發布:2024-11-02 00:14:23 瀏覽:170
魔獸世界單機資料庫 發布:2024-11-01 23:37:11 瀏覽:698
配置vlan後如何配置電腦ip 發布:2024-11-01 23:21:16 瀏覽:546
中鐵盾構機密碼是多少 發布:2024-11-01 23:07:21 瀏覽:708
工規存儲 發布:2024-11-01 22:59:33 瀏覽:802
無法識別加密狗 發布:2024-11-01 22:47:03 瀏覽:599
手機怎麼給wifi改密碼怎麼辦啊 發布:2024-11-01 22:46:03 瀏覽:858
抖音賬號的密碼是由什麼組成 發布:2024-11-01 22:45:27 瀏覽:449