① 編譯原理與實踐中正規表達式的問題
(aa|b)*
由連續兩個a或一個b的任意序列組成的語言,比如aab,baaaabbbb.
(a|bb)*
連續兩個b或一個a的任意序列。
正則語言里,|表示任選,有時也用+號。*號表示閉包--就是說任意組合。
② 鍦ㄦ嫇鎵戠┖闂翠腑錛孉鍖呭惈浜嶣錛屾庝箞璇佹槑A涓嶣鐨勫奸泦錛孉涓嶣鐨勯棴鍖咃紝A涓嶣鐨勫唴閮錛孉涓嶣鐨勮竟鐣屾湁鍖呭惈鍏崇郴
璇峰弬鑰冿細
棣栧厛錛岄傚綋閫夋嫨瀹氫箟鍙浠ヤ嬌璇佹槑綆鍖栥備緥濡傦紝鍒╃敤A鐨勯棴鍖呮槸鈥滃寘鍚獳鐨勬渶灝忕殑闂闆嗗悎鈥濓紝鐢變簬
A ⊆ B ⊆ B鐨勯棴鍖
B鐨勯棴鍖呮槸闂闆嗭紝鏁匒鐨勯棴鍖⊆B鐨勯棴鍖呫
錛堝嵆闂鍖呮紨綆楀瓙鍏充簬鍖呭惈鍏崇郴鏄淇濆簭鐨勶級
綾諱技鍙浠ヨ瘉鏄庡紑鏍告紨綆楀瓙鍏充簬鍖呭惈鍏崇郴鏄涔熸槸淇濆簭鐨勶紝鍗
A鐨勫唴閮 ⊆ B鐨勫唴閮
鎴栬呭埄鐢 鈥渪灞炰簬A鐨勯棴鍖 褰撲笖浠呭綋 x鐨勬瘡涓閭誨煙閮藉拰A鐩鎬氦鈥 鏉ラ獙璇侊細
璁緓灞炰簬A鐨勯棴鍖咃紝鍐嶄換鍙杧鐨勪竴涓閭誨煙U錛屼簬鏄
絀洪泦鍚堚墵 U鈭〢 ⊆ U鈭〣
浠庤寈涔熷睘浜嶣鐨勯棴鍖呫
鍏充簬瀵奸泦錛屽唴閮ㄤ篃涓鏍烽獙璇併
浣嗘槸鎴戣夊緱A,B鐨勮竟鐣岋紙boundary錛夊ソ鍍忎笉涓瀹氭湁鍖呭惈鍏崇郴錛燂紒
③ 資料庫閉包怎麼算的
閉包就是由一個屬性直接或間接推導出的所有屬性的集合,例如: f={a->b,b->c,a->d,e->f} ,由a可直接得到b和d,間接得到c,則a的閉包就是{a,b,c,d}。
例:設關系R(A,B,C, D,E, G)有函數依賴集F={AB→C, BC→AD,D→E, CG→B},求AB的閉包。
解:首先從AB出發,令X={A,B},由於函數依賴AB→C左邊的所有屬性都在X中,所以可以把右邊的C添加到X中,這時X={A, B,C},其次考慮函數依賴BC→AD,左邊B,C均在X中,右邊D不在X中,將其添加到X中,此時X={A,B,C,D}。
再考慮函數依賴D→E,同理可將E添加到X中,此時x={A,B,C,D,E}。上述方法再不能向X中添加屬性,所以得到{A,B} +={A,B,C,D, E}。
使用閉包的注意點
1,由於閉包會使得函數中的變數都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變數全部刪除。
2,閉包會在父函數外部,改變父函數內部變數的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變數的值。
④ 璁炬湁鍏崇郴妯″紡R錛圓,B,C,D,E錛,F={A->CD,BC->E,D->B,E->A}涓篟涓婄殑鍑芥暟渚濊禆闆嗭紝璇曟眰R涓婄殑鎵鏈夊欓夌爜銆
LR:A B C D E
鎵浠ヨ佷竴涓鍒ゆ柇
A鐨勯棴鍖咃細ABCDE
CD鐨勯棴鍖咃細ABCDE
BC鐨勯棴鍖咃細ABCDE
E鐨勯棴鍖咃細ABCDE
D鐨勯棴鍖咃細BD
B鐨勯棴鍖咃細B
鎵浠ュ欓夌爜A錛孋D錛孊C錛孍
⑤ 什麼是Python中的閉包
閉包
1.函數引用
運行結果:
圖解:
相關推薦:《Python視頻教程》
2.什麼是閉包
運行結果:
3.看一個閉包的實際例子:
運行結果:
這個例子中,函數line與變數a,b構成閉包。在創建閉包的時候,我們通過line_conf的參數a,b說明了這兩個變數的取值,這樣,我們就確定了函數的最終形式(y = x + 1和y = 4x + 5)。我們只需要變換參數a,b,就可以獲得不同的直線表達函數。由此,我們可以看到,閉包也具有提高代碼可復用性的作用。
如果沒有閉包,我們需要每次創建直線函數的時候同時說明a,b,x。這樣,我們就需要更多的參數傳遞,也減少了代碼的可移植性。
相關推薦:
Python中的迭代器是什麼