锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍙兘浼氳姹傝緭鍏ュ瘑鐮侊細secret 錛堥厤緗枃浠墮噷鍐欑殑榪欎釜瀵嗙爜錛?/p>
娣誨姞鏉$洰鎴愬姛鍚庯紝浼氭湁鎻愮ず錛?adding new entry cn=Manager,dc=example,dc=com LDAP瀛︿範 entry(record,directory object) 鏉$洰 涓鏉℃暟鎹?鐩稿綋浜庢暟鎹〃鐨勪竴鏉¤褰?/p>
entry鐢辮嫢騫蹭釜attribute緇勬垚錛宱bjectclass鏄繀欏葷殑attribute錛岀敤浜庢弿榪癳ntry鐨剆chema attribute鏄痭ame/value瀵瑰艦寮忥紝渚嬪cn = liuxuanyu cn = mengke 涓涓猲ame 鍙互瀵瑰簲澶氫釜鍊?/p>
container鏄竴縐嶇壒孌婄殑entry,涓烘暟鎹殑緇勭粐鍜岀鐞嗘彁渚涗竴涓戶鎵夸綋緋葷粨鏋?渚嬪ou 涓庡叧緋繪暟鎹簱鐨勬瘮杈冿細 LDAP鍙厑璁告爲褰㈢粨鏋?/p>
object identifier (OID) 渚嬪錛?.5.4.3 瀹冩槸灞炴х被鍨嬬殑鏍囪瘑絎?/p>
schema 鏋勯爏chema鐨勬柟寮?錛?br />
1. 緇勫悎鐜版湁鐨刼bject class The subschema publishes the schema to clients inetOrgPerson is a contemporary definition for a person entry RFC 2798 NDS鏄伒瀹圠DAP鍗忚鐨勫茍榪涜浜嗘墿灞曠殑綾籑AD浜у搧銆傝孨OVEL涔熷凡鎶奐LDAP鎹愮尞緇欎簡OPENLDAP寮婧愰」鐩紝鍙互涓栫晫鑼冨洿鍐呰嚜鐢變嬌鐢ㄣ備笌 JNDI鐩告瘮錛孞LDAP鏃犻』緇ф壙DirContext鎵嶈兘瀹炵幇娣誨姞錛屼篃鏃犻渶棰勫厛鐢熸垚娣誨姞鐨勭被錛屽彲浠ヨ薄鏅氭暟鎹闂偅鏍鳳紝鐢熸垚榪炴帴錛岀劧鍚庝嬌鐢?:add鏂規硶娣誨姞銆傝繖鏍鳳紝娣誨姞鐨勭伒媧繪ц寮轟簬JNDI銆?br />
OpenLDAP涓嬭澆鍦板潃錛?a >http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe 涓嬭澆鍚庣偣鍑誨畨瑁呭嵆鍙?br />
閰嶇疆sldap.conf 錛氬湪瀹夎鐩綍涓嬫壘鍒皊ldap.conf 錛屼慨鏀歸厤緗涓嬶細
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw secret
鍚姩OpenLDAP錛氳繘鍏md鍛戒護琛岋紝璺寵漿鍒癘penLDAP瀹夎鐩綍涓嬶紝榪愯錛?br />
slapd -d 1
鍐嶅紑涓涓猚md錛岃煩杞埌OpenLDAP瀹夎鐩綍涓嬨?br />
嫻嬭瘯OpenLDAP鏄惁姝e父鍚姩錛?br />
ldapsearch -x -s base (objectclass=*) namingContexts
浣跨敤寮曞彿銆?br />
濡傛灉榪斿洖錛?br />
dn:
namingContexts: dc=example,dc=com
澧炲姞涓涓潯鐩細
1.鍋氫竴涓狶DIF鏂囦歡
2.浣跨敤ldapadd鍛戒護
1.鍦ㄥ畨瑁呯洰褰曚笅錛屾柊寤烘枃浠秂xample.ldif錛岃緭鍏ュ涓嬪唴瀹癸細
dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
o: Example Company
dc: example
dn: cn=Manager,dc=example,dc=com
objectclass: organizationalRole
cn: Manager
2.cmd鍦ㄥ畨瑁呯洰褰曚笅錛岃繍琛岋細
ldapadd -x -D cn=Manager,dc=example,dc=com -W -f example.ldif
綆鍗曟煡璇細
ldapsearch -x -b dc=example,dc=com (objectclass=*)
鏌ヨ鎴愬姛鍚庯紝浼氳繑鍥炲垰鎵嶆彃鍏ョ殑鏉$洰銆?br />
JNDI榪炴帴OpenLDAP
Java鐨凧NDI鎺ュ彛寰堝己澶э紝鍙互榪炴帴LDAP鏈嶅姟銆?br />
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class TestOpenLDAP {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestOpenLDAP LDAPTest1 = new TestOpenLDAP();
String root = "dc=example,dc=com"; //root
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put(Context.PROVIDER_URL, "ldap://localhost/" + root);
env.put(Context.SECURITY_AUTHENTICATION, "simple" );
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=example,dc=com" );
env.put(Context.SECURITY_CREDENTIALS, "secret" );
DirContext ctx = null ;
try {
ctx = new InitialDirContext(env);
System.out.println( "璁よ瘉鎴愬姛" );
}
catch (javax.naming.AuthenticationException e) {
e.printStackTrace();
System.out.println( "璁よ瘉澶辮觸" );
}
catch (Exception e) {
System.out.println( "璁よ瘉鍑洪敊錛?/span>" );
e.printStackTrace();
}if (ctx != null ) {
try {
ctx.close();
}
catch (NamingException e) {
//ignore
}
}
}
}
闂錛?br />
1. 鍥懼艦鍖栫晫闈DAPBrowser鐨勯厤緗?br />
涓嬭澆鍦板潃錛?nbsp;http://files.blogjava.net/Unmi/LdapBrowser282.rar
瑙e帇鍚庤繘鍏dapBrowser282鐩綍錛屾墦寮閰嶇疆鏂囦歡OpenLdap_Localhost.cfg
淇敼閰嶇疆錛?br />
basedn=dc=example,dc=com
managerdn=cn=Manager,dc=example,dc=com
2. OpenLDAP鐨勮娉曪紝鍐呯疆ObjectClass
浠諱綍entry閮藉彲浠ュ湪鐗瑰畾鐨勬儏鍐典笅鍙樻垚container
LDAP璇繪搷浣滄ц兘楂?鍐欐搷浣滄ц兘涓嶅DB,DB 璇誨啓鍧囧彲錛岃鎿嶄綔鎬ц兘涓嶅LDAP
鏁版嵁緇撴瀯涓嶅悓
LDAP閫傚悎浜庡瓨鍌ㄧ戶鎵跨粨鏋勭殑鏁版嵁
namespace
DN (distinguish name) DN鏄痚ntry鐨勫悕瀛楋紝entry鐨勫敮涓鏍囪瘑
RDN (relative distinguish name) entry鍦ㄦ煇涓鍣ㄨ寖鍥村唴鐨勬爣璇?br />
CN (common name) 甯哥敤鍚嶇О 涔犳儻涓婅鐢ㄤ綔RDN
DC (domain component) 鍩熷悕
object class 瀹氫箟浜唀ntry鐨勭被鍨?br />
鏈変笁縐嶇被鍨嬬殑object Class: 鎶借薄綾匯佽緟鍔╃被鍜岀粨鏋勫寲綾匯?/p>
2. 鎵╁睍鐜版湁鐨刼bject class 緇ф壙 浣跨敤杈呭姪綾伙紙瀹為檯涓婃槸涓縐嶈仛鍚堝叧緋伙級
3. JLDAP涓嶫NDI鐨勬瘮杈?br />
JLDAP鏄敱novel寮鍙戠殑錛屽師鏄拡瀵筃ovel鐨凬DS鐩綍璁捐鐨凧AVA璁塊棶宸ュ叿銆侼OVEL鐨凬DS鍜岀綉鏅紙NETSCAPE錛夌殑鐩綍鏄伐鍏風晫鏈鏃╃殑鐩綍浜у搧銆侸LDAP騫墮潪JNDI鐨勬湇鍔′緵搴旇咃紝鑰屾槸鍚屼竴鎶借薄灞傛涓嬬殑璁塊棶宸ュ叿闆嗐備笌JNDI-LDAP鐩告瘮錛孞LDAP鏇存帴榪戜簬綾誨叧緋繪暟鎹簱鐨勮闂柟寮忋?
浣嗙敱浜嶫LDAP鐩墠鏄闂甆DS錛屽洜姝わ紝瀹冧笉鍏峰JNDI瀹屽叏闈㈠悜瀵硅薄瀛樺偍鐨勮兘鍔涳紝瀵逛簬楂樼駭鐨凩DAP搴旂敤錛孞LDAP涓嶆槸鍚堥傜殑閫夋嫨銆?/p>
4. OpenLDAP鐨勬繁鍏ョ鐞?
2.1姹?浣嶄簩榪涘埗鏁頒腑1鐨勪釜鏁?br />
瑙f硶1錛氱洿瑙傛硶錛屾瘡嬈¢櫎浠?錛岃綆椾綑鏁頒負1鐨勪釜鏁?O(log2v)
瑙f硶2錛氱畝鍗曚綅鎿嶄綔錛屾瘡嬈′笌0x01鍋氫笌榪愮畻錛屽啀鍙崇Щ涓浣嶃侽(log2v)
瑙f硶3錛氫嬌鐢ㄤ綅鎿嶄綔v & (v-1) , 姣忔鍙噺灝戜簩榪涘埗鏁板瓧涓殑涓涓?銆傦紙鑻 & (v-1) == 0, 鍒檝涓?鐨勬柟騫傦級
瑙f硶4錛氱┖闂存崲鏃墮棿錛屽埄鐢ㄩ鐩腑瀛楅暱8浣嶇殑鐮寸喚錛屽緩绔嬩竴涓┓涓炬暟緇勩侽(1)
鐭ヨ瘑鐐癸細浣嶈繍綆楃殑鎬ц川
闄勶細鏁扮粍鏈?n+1涓暟錛屽叾涓璶涓暟鎴愬鍑虹幇錛屾壘鍑洪潪鎴愬鍑虹幇鐨勯偅涓暟銆?br />
鏁扮粍鎵鏈夊厓绱犲仛寮傛垨鎿嶄綔銆?/span>
2.2
1.N!鐨勬湯灝炬湁澶氬皯涓浂
2.N!浜岃繘鍒惰〃紺轟腑鏈浣庝綅1鐨勪綅緗?/span>
1.瑙f硶錛氳川鍥犳暟鍒嗚В鍙煡錛?鍙湁2*5鍙緱錛屾墍浠?鐨勪釜鏁板氨鏄川鍥犳暟鍒嗚В涓?鐨勪釜鏁頒笌5鐨勪釜鏁扮殑鏈灝忓鹼紝瀹為檯涓婂氨鏄?br />
姹?鐨勪釜鏁癦銆?br />
Z= [N/5] +銆[N/5^2] +錛籒/5^3錛? ……
[N/5]琛ㄧず涓嶅ぇ浜嶯鐨勬暟涓?鐨勫嶆暟璐$尞涓涓?
[N/5^2]琛ㄧず涓嶅ぇ浜嶯鐨勬暟涓?^2鍐嶈礎鐚竴涓?/銆?/span>
2.瑙f硶錛氬洜涓鴻川鍥犳暟鍒嗚В涓彧鏈?鏄伓鏁幫紝鎵浠 = [N/2] + [N/2^2] + [N/2^3] + …… +
2.3瀵繪壘澶氭暟鍏冪礌闂
瑙f硶錛氬噺娌伙細姣忔鍒犻櫎涓や釜涓嶅悓鐨処D,姘寸帇ID鍑虹幇鐨勬鏁頒粛鏃т細瓚呰繃鎬繪暟鐨勪竴鍗娿?/span>
2.4浠?鍒癗鐨勬墍鏈夋暟涓?#8220;1”鍑虹幇鐨勪釜鏁?br /> 瑙f硶錛氬鎵?鍑虹幇鐨勮寰嬶紝姣旇緝澶嶆潅銆?/span>
2.5瀵繪壘N涓暣鏁頒腑鏈澶х殑K涓暟
瑙f硶1錛氶夋嫨鎺掑簭錛岄夊嚭鏈澶х殑K涓暟銆?O(n*k)
涓鐐規敼榪涳細閮ㄥ垎鍫嗘帓搴忥紝鍏堝緩鍫嗭紝鍐嶆帓鍑烘渶澶х殑k涓暟鍗沖彲銆侽(n)+O(logn*k)
瑙f硶2錛氬垎娌伙紝鍒╃敤蹇熸帓搴忕殑鍒掑垎鎬濊礬銆侽(n*log2k)
瑙f硶3錛氫簩鍒嗘悳绱紙涓庛婄紪紼嬬彔鐜戙嬬浜岀珷闂A鎬濊礬綾諱技錛夛紝鏈変袱縐嶅垝鍒嗘柟寮忥細
1.璁懼凡鐭涓暟涓渶灝忓糣min錛屾渶澶у糣max錛屽鍖洪棿[Vmin, Vmax]鍋氫簩鍒嗗嵆鍙?br />
2.璁綨涓暣鏁版槸M浣嶉暱鐨勩備粠鏈楂樹綅寮濮嬶紝鎸塨i浣?銆?浜屽垎銆?br />
姝よВ娉曢傜敤浜庡ぇ鏁版嵁閲忕殑澶勭悊錛屼笉榪囪澶氭璇誨啓鑻ュ共涓復鏃舵枃浠躲?br />
瑙f硶4錛氬緩涓涓渶灝忓爢瀛樺偍K涓暟錛屽爢欏朵負鍫嗕腑鏈灝忓箋?br />
瀵圭k鍒癗涓暟錛岃嫢A[i]澶т簬鍫嗛《H[0]錛屼護H[0]=A[i]錛屽啀璋冪敤shift-down榪囩▼璋冩暣鍫嗐?br />
姝よВ娉曢潪甯擱傚悎浜嶯鍊煎緢澶х殑鎯呭喌錛屽鏉傚害涓篛(n * log2k)
瑙f硶5錛氱┖闂存崲鏃墮棿錛岀敤count[Vmax]璁$畻姣忎釜鏁板瓧鍑虹幇鐨勬鏁般?br />
濡傛灉Vmax寰堝ぇ錛屽皢[0, Vmax]鍒嗘垚m涓皬鍧楋紝鍐嶅垎鍒璁哄嵆鍙?
2.7鏈澶у叕綰︽暟闂
鐢ㄤ綅榪愮畻姹傝В
浣嶈繍綆楅棶棰橈細
1.姹備竴涓暣鏁扮殑浜岃繘鍒惰〃紺轟腑1鐨勪釜鏁?br />
2.閫嗚漿涓涓暣鏁扮殑浜岃繘鍒惰〃紺洪棶棰?/span>
2.9鏂愭嘗閭e鏁板垪
·閫掑綊 鏁堢巼鏈浣?br />
·榪唬 O(n)
·鐭╅樀鍒嗘不娉?
2.14瀛愭暟緇勪箣鍜岀殑鏈澶у?
鍒嗘不
鍔ㄦ佽鍒?/span>
2.15瀛愮煩闃典箣鍜岀殑鏈澶у?br /> 鍥哄畾涓緇達紝鍙︿竴緇磋漿鍖栦負瀛愭暟緇勪箣鍜岀殑鏈澶у奸棶棰?/span>
2.16姹傛暟緇勪腑鏈闀塊掑瀛楃鍒楃殑闀垮害
瑙f硶1錛氬姩鎬佽鍒?/p>
鍋囪array[]鐨勫墠i涓厓绱犱腑錛屾渶闀塊掑瀛愬簭鍒楃殑闀垮害涓篖IS[i]錛?/p>
鍒欙紝LIS[i + 錛慮 = max{1, LIS[k]+1}, array[i+1] > array[k], for any k<=i
O(N^2)鐨勬椂闂村鏉傚害
瑙f硶2錛?/p>
MLIS[i]瀹氫箟涓哄墠i涓厓绱犱腑錛屼互array[i]涓烘渶澶у厓绱犵殑鏈闀塊掑瀛愬簭鍒楃殑闀垮害銆?/p>
鍙互璇佹槑錛孧LIS[i]鐨勬渶澶у間篃鏄渶緇堢殑緇撴灉銆?/p>
MaxV[i]淇濆瓨闀垮害涓篿鐨勯掑瀛愬簭鍒楁渶澶у厓绱犵殑鏈灝忓箋?/p>
瑙f硶2鐨勭▼搴忔洿鏂癕axV鐨勯儴鍒嗗簲璇ユ槸鏈夐棶棰樼殑錛岀敱姝ゅ鑷存椂闂村鏉傚害鐨勫垎鏋愰敊璇紝騫朵笖瑙f硶3涔熸槸閿欒鐨勩?/p>
2.17鏁扮粍寰幆縐諱綅
鏁扮粍闂鎬濊礬錛?/p>
鎺掑簭鎬濊礬
鍔ㄦ佽鍒?/p>
鐪嬫垚涓涓暟鍒楁垨鍚戦噺
2.18鏁扮粍鍒嗗壊
3.1瀛楃涓茬Щ浣嶅寘鍚殑闂
緇欏畾涓や釜瀛楃涓瞫1鍜宻2錛岃姹傚垽瀹歴2鑳藉惁琚玸1鍋氬驚鐜Щ浣嶅緱鍒扮殑瀛楃涓插寘鍚備緥濡傦細s1 = AABCD , s2 = CDAA錛岃繑鍥瀟rue. 緇欏畾s1 = ABCD 鍜?s2 = ACBD錛岃繑鍥瀎alse.
瑙f硶1錛氭ā鎷熷瓧絎︿覆縐諱綅鐨勮繃紼嬶紝鍒ゆ柇鏄惁鍖呭惈瀛愪覆
瑙f硶2錛氬垽鏂璼2鏄惁涓簊1s1鐨勫瓙涓插嵆鍙?/p>
瑙f硶3錛氫笉鐢寵絀洪棿錛屾ā鎷熷垽鏂璼2鏄惁涓簊1s1瀛愪覆鐨勮繃紼嬨?/p>
鎬濊礬錛氬瓧絎︿覆鍙互鎶借薄鎴愬悜閲忔潵鑰冭檻銆?/p>
3.2鐢佃瘽鍙風爜瀵瑰簲鑻辮鍗曡瘝
綾諱技浜庢眰騫傞泦闂
瑙f硶1錛氳凱浠o紝鐢╳hile寰幆妯℃嫙
瑙f硶2錛氶掑綊
3.3璁$畻瀛楃涓茬浉浼煎害
閫掑綊姹傝В
char[] strB, int pBBegin, int pBEnd) {
if (pABegin > pAEnd) {
if (pBBegin > pBEnd) {
return 0;
} else {
return pBEnd - pBBegin + 1;
}
}
if (pBBegin > pBEnd) {
if (pABegin > pAEnd) {
return 0;
} else {
return pAEnd - pABegin + 1;
}
}
if (strA[pABegin] == strB[pBBegin]) {
return calStrDis(strA, pABegin + 1, pAEnd, strB,
pBBegin + 1, pBEnd);
} else {
int t1 = calStrDis(strA, pABegin, pAEnd, strB, pBBegin + 1,
pBEnd);
int t2 = calStrDis(strA, pABegin + 1, pAEnd, strB, pBBegin ,
pBEnd);
int t3 = calStrDis(strA, pABegin + 1, pAEnd, strB, pBBegin + 1 ,
pBEnd);
return min(t1, t2, t3) + 1;
}
}
3.4浠庢棤澶撮摼琛ㄤ腑鍒犻櫎鑺傜偣
榪欎釜闂寰堟棤鑰?/span>
3.5鏈鐭憳瑕佺敓鎴?br /> 鏈夌┖鍐嶇湅
3.6緙栫▼鍒ゆ柇涓や釜閾捐〃鏄惁鐩鎬氦
杞寲鎴愰摼琛ㄦ槸鍚︽湁鐜殑闂
3.7闃熷垪涓彇鏈澶у兼搷浣?br /> 鍙垎瑙d負涓や釜瀛愰棶棰?br /> 瀛愰棶棰?錛氳璁′竴涓爢鏍堬紝浣垮叆鏍堬紝鍑烘爤錛屽彇鏈澶у肩殑鏃墮棿澶嶆潅搴﹂兘鏄疧(1)銆?br /> 鎬濊礬錛氱敤絀洪棿鎹㈡椂闂達紝鍔犱竴涓暟緇刲ink2NextMaxItem[]錛宭ink2NextMaxItem[i]瀛樺偍鐨勬槸鍓峣涓厓绱犱腑鏈澶у肩殑涓嬫爣銆?/span>
瀛愰棶棰?錛氱敤涓婅堪鐗規х殑涓や釜鍫嗘爤瀹炵幇涓涓槦鍒?br /> 鍫嗘爤A璐熻矗鍏ラ槦錛屽爢鏍圔璐熻矗鍑洪槦銆傚綋鍫嗘爤B絀虹殑鏃跺欙紝灝嗗爢鏍圓涓殑鏁版嵁鍏ㄩ儴寮瑰嚭騫跺帇鍏ュ爢鏍圔
3.8 姹備簩鍙夋爲緇撶偣涔嬮棿鐨勬渶澶ц窛紱?br /> 鍔ㄦ佽鍒掑疄鐜幫紝榪樻槸涓嶅お鎳傘?/span>
3.9閲嶅緩浜屽弶鏍?br /> 閫掑綊姹傝В
3.10鍒嗗眰閬嶅巻浜屽弶鏍?br /> 闃熷垪閬嶅巻浜屽弶鏍?鍙橀噺鏍囪灞傛
3.11紼嬪簭鏀歸敊
緙栧啓姝g‘鐨勪簩鍒嗘悳绱㈢▼搴?br />
C浠g爜錛?br />
Java浠g爜錛?/span>
4.8涓夎褰㈡祴璇曠敤渚?br />
嫻嬭瘯鐢ㄤ緥鐨勪笁縐嶇被鍨嬶細
姝e父杈撳叆 瑕嗙洊鍔熻兘鐐?br />
闈炴硶杈撳叆 鍊煎煙閿欒 綾誨瀷閿欒
杈圭晫鍊艱緭鍏?0 1 MAX MIN