â
ð?³ ç¨ PHP çæ¹å¼å®ç°çå?ç±»ç®æ³å??é ð?³
Englishã
æ¯å¨æå°ä¸æ´ï¼æ±åºé¢?ï¼æ±è?å¾ At least once a week, ask for problems and abuse
ç®æ?ç»æ
âââPackage
â âââ Sort æåºç¯
â â âââ BubbleSort.php åæ³¡æåº
â â âââ HeapSort.php å æåº å¤§æ ¹å
â â âââ MBaseSort.php åºæ°æåº MSD
â â âââ LBaseSort.php åºæ°æåº LSD
â â âââ QuickSort.php å¿«éæåº
â â âââ ShuttleSort.php 飿¢æåº
â â âââ ShellSort.php å¸å°æåº
â â âââ MergeSort.php å½å¹¶æåº
â â âââ InsertSort.php æå
¥æåº
â â âââ SelectSort.php éæ©æåº
â â
â âââ Query æ¥æ¾ç¯
â â âââ BinaryQuery.php äºå?æ¥æ¾
â â âââ InseertQuery.php æå
¥æ¥æ¾
â â âââ FibonacciQuery.php æ?æ³¢é£å¥æ¥æ¾
â â âââ BFSQuery.php 广度ä¼?å
?æ¥æ¾
â âââ Kmp.php ç®æ³å¯¼è®º-KMPç®æ³
â âââ DijkstraQuery.php 迪å
æ¯ç¹æç®æ³
â â âââ QulickQuery.php å¿«éæ¥æ¾
â â
â âââ Structure æ°æ®ç»æ
â â âââ StackExample.php å æ ? å
?è¿å?åº LIFO (Last In First Out)
â â âââ LinearChain.php 线æ§è¡¨ åé¾å?å¨
â â âââ LinearOrder.php 线æ§è¡¨ 顺åºå?å¨
â â âââ BinarySearchTree.php äºåæ?ç´¢æ
â â
â âââ Tools å°å·¥å
·é
â â âââ SystemSwitch.php å æ ?å®ç°è¿å?¶è½¬æ¢
â â
â âââ Other å
¶ä»
â âââ MonkeyKing.php 约ç夫ç¯
â âââ DynamicProgramming.php 卿?è§å?
â âââ Fibonacci.php æ?æ³¢é£å¥æ°å?
â âââ StealingApples.php å?·è¹ææ±ä½
â âââ HanoiGames.php æ±è¯ºå¡æ¸¸æ?
â âââ BidirectionalQueue.php åå?é?å?
â âââ ColorBricks.php 彩è²ç å
â âââ GetCattle.php çå¹´æ±ç
â âââ OnlyNumbers.php æ±å¯ä¸æ°
â âââ PokerGames.php æ´æå
ç
â âââ Interval.php æ½å¥åºé´ç®æ³
â âââ Maze.php 迷宫寻åç®æ³
â âââ AntsClimb.php èè?ç?¬æç®æ³
â âââ Encryption.php 对称å å¯ç®æ³
â âââ ElevatorDispatch.php ç¼ç¨ä¹ç¾-çµæ¢¯è°?åº¦ç®æ³
â âââ PointInTriangle.php å?éåé计ç®ç¹æ?¯å?¦å¨ä¸è§å½¢ä¸
â âââ TraversalOfBinary.php äºåæ ééå½é?åç®æ³å®ç°
â âââ Knapsack.php è´ªå¿?ç®æ³ä¹è?å
é®é¢?å®ç°
â âââ BigSmallReplace.php Hello World è¾åº Olleh Dlrow
â âââ Solution.php Facebooké¢è¯é¢?ä¹å²å±¿å¨é¿ç®æ³
â âââ RotationSort.php Facebooké¢è¯é¢?ä¹é¡ºæ¶é?åæç®æ³
â âââ Square.php Facebooké¢è¯é¢?ä¹å?¤æå个ç¹è?½å?¦ç»æ??æ£æ¹å½¢ç®æ³
â âââ Prim.php Primç®æ³(æå°çæ??æ ç®æ³)
â âââ CartesianProduct.php ç¬å¡å°ç§¯ç®æ³
â âââ Square.php é¢è¯é¢?ä¹å¹³é¢ä»»æåç¹è?½å?¦ç»æ??ä¸ä¸ªç©å½¢
â âââ Judge.php é¢è¯é¢?乿å
çä¸ä»»éäºå¼ å?¤ææ?¯ä¸æ?¯é¡ºå?
â âââ Factorial.php é¢è¯é¢?ä¹Nçé?¶ä¹?æ«å°¾æå¤å°ä¸ª0
| âââ HashTable.php HashTable
| âââ RotateSort.php é¢è¯é¢?ä¹é£è½¦æè½¬æåºç®æ³
â
âââLICENSE
âââREADME.md
è¦?å?ä»ä¹?ï¼
è®°å½èªå·±ç?è§£ç®æ³ï¼æ°æ®ç»æçè¿ç¨ï¼å°½å¯è?½çç®åå
¨é¢ä»¥å详ç»ï¼è®©ç®æ³å¦ä¹ è¿?ç¨ç?µæ´»èªå¦ï¼å æ²¹(ภâ¢Ì_â¢Ì?)à¸
å½ç¶
ç¨ PHP å®ç°ç®æ³å¹¶æ¿ä»£å®?æ¹æ?ä¾ç彿°æ?¯æè ¢çäºæ?
.ä½è¿å³ä¸ä»£è¡¨æé
ç®æ³å°±æ?¯ä»¶æ æä¹çäº , æ¯ä¸ªç®æ³é?½æ?¯ä¸ç§ææ?³çç»æ¶ , å¦ä¹ ä¼?ç§çææ?³ , 弿æç»´
ä»ä¹?æ?¯ç®æ³ï¼
ç´ç½å°è¯´ï¼ç®æ³å°±æ?¯ä»»ä½æ?ç¡®å®ä¹ç计ç®è¿ç¨ï¼å®?æ¥æ¶ä¸äºå¼æ?éå??ä½ä¸ºè¾å ¥ï¼å¹¶äº§çä¸äºå¼æ?éå??ä½ä¸ºè¾åºãè¿æ ·ï¼ç®æ³å°±æ?¯å°è¾å ¥è½¬æ¢ä¸ºè¾åºçä¸ç³»å?计ç®è¿ç¨ãæ¥æº?ï¼Thomas H. Cormen, Chales E. Leiserson (2009), ãç®æ³å¯¼è®ºç¬¬ä¸ç?ãã
ç®èè¨ä¹ï¼æ?们å¯ä»¥è¯´ç®æ³å°±æ?¯ç¨æ¥è§£å³ä¸ä¸ªç¹å®ä»»å¡çä¸ç³»å?æ¥éª¤ï¼?æ?¯çï¼ä¸æ¢è®¡ç®æºå¨ä½¿ç¨ç®æ³ï¼äººç±»ä¹å?æ ·å¦æ¤ï¼ãç®åï¼ä¸ä¸ªææ?çç®æ³åºè¯¥å?«æä¸ä¸ªéè¦?ç¹æ§ï¼
- å®?å¿ é¡»æ?¯æé?çï¼å¦æä½ 设计çç®æ³æ°¸æ 伿¢å°å°è¯è§£å³é®é¢?ï¼é£ä¹?å®?æ?¯æ ç¨çã
- å®?å¿ é¡»å ·å¤æ?ç¡®å®ä¹çæä»¤ï¼ç®æ³çæ¯ä¸æ¥é?½å¿ é¡»åç¡®å®ä¹ï¼å¨ä»»ä½åºæ¯ä¸æä»¤é?½åºå½æ²¡ææ§ä¹ã
- å®?å¿ é¡»æ?¯ææ?çï¼ä¸ä¸ªç®æ³è¢«è®¾è®¡ç¨ä»¥è§£å³æ?个é®é¢?ï¼é£ä¹?å®?å°±åºå½è?½è§£å³è¿ä¸ªé®é¢?ï¼å¹¶ä¸ä» ä» ä½¿ç¨çº¸åç¬å°±è?½è¯?æ?è¯¥ç®æ³æ?¯æ¶æçã
对æ°
log10100 ç¸å½äºé®"å°å¤å°ä¸ª10ç¸ä¹?çç»æä¸º100"ï¼çæ¡?å½ç¶æ?¯2ä¸ªäº å æ¤log10100=2ï¼å³å¯¹æ°è¿?ç®æ?¯å¹è¿?ç®çéè¿?ç®
| left | right |
|---|---|
| 23 = 8 | log28 = 3 |
| 24 = 16 | log216 = 4 |
| 25 = 32 | log232 = 5 |
è¿?è¡æ¶é´
以äºå?æ¥æ¾ä¸ºä¾ï¼ä½¿ç¨å®?å¯èç?å¤å°æ¶é´å¢ï¼ç®åæ¥æ¾é?ä¸ªå°æ£æ¥æ°åï¼å¦æå?表å
å?«100个æ°åï¼æå¤éè¦?ç100次ã
æ¢èè¨ä¹æå¤éè¦?çæµçæ¬¡æ°ä¸å?表é¿åº¦ç¸å?ï¼è¿è¢«ç§°ä¸ºçº¿æ§æ¶é´(linear time)ï¼èäºå?æ¥æ¾å?ä¸å?ï¼å¦æå?表å
å?«100个å
?ç´
æå¤éè¦?7次ï¼å¦æå?表å
å?«40亿个æ°åï¼æå¤éç32次ï¼èå?æ¥æ¾çè¿?è¡æ¶é´ä¸ºå¯¹æ°æ¶é´ O(log)
大O表示æ³
大Oè¡¨ç¤ºæ³æ?¯ä¸ç§ç¹æ®çè¡¨ç¤ºæ³ ï¼æåºäºç®æ³çé度æå¤å¿«ãæä¸ªå±ç¨åï¼å®é ä¸ï¼ä½ ç»å¸¸è¦?å»å¤å?¶å?«äººç代ç ?ã å¨è¿ç§æ? åµä¸ï¼ç¥é?è¿äºç®æ³çé度æå¿«ææ ¢
- ç®æ³çè¿?è¡æ¶é´ä»¥ä¸å?çé度å¢å
- ä¾å¦ç®åæ¥æ¾ä¸äºå?æ¥æ¾çåºå?«
| å ?ç´ | ç®åæ¥æ¾ | äºå?æ¥æ¾ |
|---|---|---|
| 100个å ?ç´ | 100ms | 7ms |
| 10000个å ?ç´ | 10s | 14ms |
| 1 000 000 000 个å ?ç´ | 11天 | 30ms |
- 大
Oè¡¨ç¤ºæ³æåºäºç®æ³æå¤å¿«ï¼ä¾å¦å?表å å?«n个å ?ç´ ï¼ç®åæ¥æ¾éè¦?æ£æ¥æ¯ä¸ªå ?ç´ ï¼å æ¤éè¦?æ§è¡n次æä½ 使ç¨å¤§O表示æ³è¿ä¸ªè¿?è¡æ¶é´ä¸ºO(n),äºå?æ¥æ¾éè¦?æ§è¡logn次æä½ï¼ä½¿ç¨å¤§O表示为O(log n)- ä¸äºå¸¸è§?ç大Oè¿?è¡æ¶é´
- O(log n) ,ä¹å«å¯¹æ°æ¶é´ï¼è¿æ ·çç®æ³å æ¬äºå?ç®æ³
- O(n),ä¹å«çº¿æ§æ¶é´ï¼è¿æ ·çç®æ³å æ¬ç®åæ¥æ¾ã
- O(n * log n) å¿«éæåº
- O(n2),éæ©æåº
- O(n!) å³é?¶ä¹?æ¶é´
- è¿éæ?¯éç¹
- ç®æ³çé度æçå¹¶éæ¶é´ï¼èæ?¯æä½æ°çå¢é
- è°?è®ºç®æ³çé度æ¶é´æ¶ï¼æ?们说çæ?¯éçè¾å ¥çå¢å ï¼å ¶è¿?è¡æ¶é´å°ä»¥ä»ä¹?æ ·çé度å¢å
- ç®æ³çè¿?è¡æ¶é´ç¨å¤§O表示æ³è¡¨ç¤º
- O(log n)æ¯O(n)å¿«ï¼å½éè¦?æ?ç´¢çå ?ç´ è¶å¤æ¶ï¼åè æ¯å?è å¿«çè¶å¤
ç¼åè§£å³å®é é®é¢?çç¨åºè¿ç¨
- å¦ä½ç¨æ°æ®å½¢å¼æè¿°é®é¢?ï¼å³å°é®é¢?æ½è±¡ä¸ºä¸ä¸ªæ°å¦æ¨¡å
- é®é¢?ææ¶åå?°çæ°æ®éç大å°åæ°æ®ä¹é´çå ³ç³»
- å¦ä½å¨è®¡ç®æºä¸å¨å?æ°æ®åä½ç°æ°æ®ä¹é´çå ³ç³»
- å¤ç?æ°æ®æ¶éè¦?å¯¹æ°æ®æ§è¡çæä½
- ç¼åçç¨åºçæ§è?½æ?¯å?¦è¯å¥½
æ°æ®(Data)
- æ?¯å®¢è§äºç©ç符å·è¡¨ç¤ºï¼å¨è®¡ç®æºç§å¦ä¸æçæ?¯ææè?½è¾å ¥å?°è®¡ç®æºä¸å¹¶è¢«è®¡ç®æºç¨åºå¤ç?ç符å·çæ»ç§°ã
- æ°æ®å ?ç´ (Data Element) :æ?¯æ°æ®çåºæ¬åä½ï¼å¨ç¨åºä¸é常ä½ä¸ºä¸ä¸ªæ´ä½æ¥è¿è¡è?èåå¤ç?ãä¸ä¸ªæ°æ®å ?ç´ å¯ç±è¥å¹²ä¸ªæ°æ®é¡¹(Data Item)ç»æ??ã
- æ°æ®é¡¹(Data Item) : æ?¯æ°æ®çä¸å¯å?å²çæå°åä½ãæ°æ®é¡¹æ?¯å¯¹å®¢è§äºç©æ?䏿¹é¢ç¹æ§çæ°æ®æè¿°ã
- æ°æ®å¯¹è±¡(Data Object) :æ?¯æ§è´¨ç¸å?çæ°æ®å ?ç´ çéå??ï¼æ?¯æ°æ®çä¸ä¸ªå?éãå¦å符éå??C={â?Aâ,âBâ,âC,â¦} ã
- æ°æ®ç»æ :ç¸äºä¹é´å ·æä¸å®è?ç³»çæ°æ®å ?ç´ çéå??ã
- æ°æ®çé»è¾ç»æ : æ°æ®å ?ç´ ä¹é´çç¸äºå ³ç³»ç§°ä¸ºé»è¾ç»æã
- æ°æ®æä½ : å¯¹æ°æ®è¦?è¿è¡çè¿?ç®
- æ°æ®ç±»å(Data Type):æçæ?¯ä¸ä¸ªå¼çéå??åå®ä¹å¨è¯¥å¼éä¸çä¸ç»æä½çæ»ç§°ã
æ°æ®çé»è¾ç»ææåç§åºæ¬ç±»å
- éå??ï¼ç»æä¸æ°æ®å ?ç´ ä¹é´é¤äºâå±äºå?ä¸ä¸ªéå??"å¤,å乿²¡æå ¶ä»çå ³ç³»
- 线æ§ç»æï¼ç»æä¸çæ°æ®å ?ç´ å?å¨ä¸å¯¹ä¸çå ³ç³»
- æ å½¢ç»æï¼ç»æä¸çæ°æ®å ?ç´ å?å¨ä¸å¯¹å¤çå ³ç³»
- ç½ç¶æ?è å¾ç¶ç»æï¼ç»æä¸çæ°æ®å ?ç´ å?å¨å¤å¯¹å¤çå ³ç³»
æ°æ®ç»æçå¨å?æ¹å¼
ç±æ°æ®å ?ç´ ä¹é´çå ³ç³»å¨è®¡ç®æºä¸æä¸¤ç§ä¸å?çè¡¨ç¤ºæ¹æ³ââ顺åºè¡¨ç¤ºåé顺åºè¡¨ç¤ºï¼ä»å?导åºä¸¤ç§å¨å?æ¹å¼ï¼é¡ºåºå¨å?ç»æåé¾å¼å¨å?ç»æ
- 顺åºå?å¨ç»æï¼ç¨æ°æ®å ?ç´ å¨å?å¨å¨ä¸çç¸å¯¹ä½ç½®æ¥è¡¨ç¤ºæ°æ®å ?ç´ ä¹é´çé»è¾ç»æ(å ³ç³»)ï¼æ°æ®å ?ç´ å?æ¾çå°åæ?¯è¿ç»ç
- é¾å¼å?å¨ç»æï¼å¨æ¯ä¸ä¸ªæ°æ®å ?ç´ ä¸å¢å ä¸ä¸ªå?æ¾å¦ä¸ä¸ªå ?ç´ å°åçæé?(pointer)ï¼ç¨è¯¥æé?æ¥è¡¨ç¤ºæ°æ®å ?ç´ ä¹é´çé»è¾ç»æ(å ³ç³»)ï¼æ°æ®å ?ç´ å?æ¾çå°åæ?¯å?¦è¿ç»æ²¡æè¦?æ±
æ°æ®çé»è¾ç»æåç©ç?ç»ææ?¯å¯ä¸å¯å?ç两个æ¹é¢ï¼ä¸ä¸ªç®æ³ç设计åå³äºæéå®çé»è¾ç»æï¼èç®æ³çå®ç°ä¾èµäºæéç¨çå?å¨ç»æ
ç®æ³(Algorithm)
æ?¯å¯¹ç¹å®é®é¢?æ±è§£æ¹æ³(æ¥éª¤)çä¸ç§æè¿°ï¼æ?¯æä»¤çæé?åºå?ï¼å ¶ä¸æ¯ä¸æ¡æä»¤è¡¨ç¤ºä¸ä¸ªæ?å¤ä¸ªæä½ã
ç®æ³å ·æä»¥ä¸äºä¸ªç¹æ§
- æç©·æ§ï¼ ä¸ä¸ªç®æ³å¿ é¡»æ»æ?¯å¨æ§è¡æç©·æ¥ä¹å?ç»æï¼ä¸æ¯ä¸æ¥é?½å¨æç©·æ¶é´å 宿??
- ç¡®å®æ§ï¼ç®æ³ä¸æ¯ä¸æ¡æä»¤å¿ é¡»æç¡®å?çå?«ä¹ï¼ä¸å?å¨äºä¹æ§ï¼ä¸ç®æ³åªæä¸ä¸ªå ¥å£åä¸ä¸ªåºå£
- å¯è¡æ§ï¼ ä¸ä¸ªç®æ³æ?¯è?½è¡çï¼å³ç®æ³æè¿°çæä½é?½å¯ä»¥éè¿å·²ç»å®ç°çåºæ¬è¿?ç®æ§è¡æé?次æ¥å®ç°
- è¾å ¥ï¼ ä¸ä¸ªç®æ³æé¶ä¸ªæ?å¤ä¸ªè¾å ¥ï¼è¿äºè¾å ¥åèªäºæ?个ç¹å®ç对象éå??
- è¾åºï¼ ä¸ä¸ªç®æ³æä¸ä¸ªæ?å¤ä¸ªè¾åºï¼è¿äºè¾åºæ?¯å?è¾å ¥æçæ?äºç¹å®å ³ç³»çé
ç®æ³åç¨åºæ?¯ä¸¤ä¸ªä¸å?çæ¦å¿µ
ä¸ä¸ªè®¡ç®æºç¨åºæ?¯å¯¹ä¸ä¸ªç®æ³ä½¿ç¨æ?ç§ç¨åºè®¾è®¡è¯è¨çå ·ä½å®ç°ãç®æ³å¿ é¡»å¯ç»?æ¢æå³ç䏿?¯ææçè®¡ç®æºç¨åºé?½æ?¯ç®æ³ã
è¯ä»·ä¸ä¸ªå¥½çç®æ³æä»¥ä¸å 个æ å
- æ£ç¡®æ§(Correctness )ï¼ ç®æ³åºæ»¡è¶³å ·ä½é®é¢?çé
- å¯è¯»æ§(Readability)ï¼ ç®æ³åºå®¹æ?ä¾äººé? 读å交æµ?ï¼å¯è¯»æ§å¥½çç®æ³æå©äºå¯¹ç®æ³çç?è§£åä¿®æ¹
- å?¥å£®æ§(Robustness)ï¼ ç®æ³åºå ·æå®¹éå¤ç?ï¼å½è¾å ¥éæ³æ?éè¯¯æ°æ®æ¶ï¼ç®æ³åºè?½éå½å°ä½åºååºæ?è¿è¡å¤ç?ï¼èä¸ä¼äº§çè«å?å ¶å¦çè¾åºç»æ
- éç¨æ§(Generality)ï¼ ç®æ³åºå ·æä¸è?¬æ§ ï¼å³ç®æ³çå¤ç?ç»æå¯¹äºä¸è?¬çæ°æ®éå??é?½æ??ç«
æ?çä¸å?å¨ééæ±ï¼ æ?çæçæ?¯ç®æ³æ§è¡çæ¶é´ï¼å?å¨ééæ±æç®æ³æ§è¡è¿ç¨ä¸æéè¦?çæå¤§å?å¨ç©ºé´ï¼ä¸è?¬å°ï¼è¿ä¸¤è ä¸é®é¢?çè§æ¨¡æå ³
ç®æ³çæ¶é´å¤æåº¦
ç®æ³ä¸åºæ¬æä½é夿§è¡çæ¬¡æ°æ?¯é®é¢?è§æ¨¡nçæ?ä¸ªå½æ°ï¼å ¶æ¶é´é度记ä½T(n)=O(f(n))ï¼ç§°ä½ç®æ³çæ¸?è¿æ¶é´å¤æåº¦(Asymptotic Time complexity)ï¼ç®ç§°æ¶é´å¤æåº¦
ç®æ³ç空é´å¤æåº¦
æ?¯æç®æ³ç¼åæ??ç¨åºå?ï¼å¨è®¡ç®æºä¸è¿?è¡æ¶æéå?å¨ç©ºé´å¤§å°ç度éï¼è®°ä½ï¼S(n)=O(f(n)),å ¶ä¸n为é®é¢?è§æ¨¡
éå½å循ç¯çç®åæ¯è¾?ï¼
- ä»ç¨åºä¸çï¼éå½è¡¨ç°ä¸ºèªå·±è°?ç¨èªå·±ï¼å¾ªç¯å?没æè¿æ ·çå½¢å¼ã
- é彿?¯ä»é®é¢?çæç»?ç®æ åºåï¼é?æ¸?å°å¤æé®é¢?å为ç®åé®é¢?ï¼å¹¶ä¸ç®åçé®é¢?çè§£å³æè·¯å夿é®é¢?䏿 ·ï¼å?æ¶å?å¨åºåæ? åµï¼å°±è?½æç»?æ±å¾é®é¢?ï¼æ?¯éå?çãèå¾ªç¯æ?¯ä»ç®åé®é¢?åºåï¼ä¸æ¥æ¥çå?ååå±ï¼æç»?æ±å¾é®é¢?ï¼æ?¯æ£å?çã
- ä»»æå¾ªç¯é?½æ?¯å¯ä»¥ç¨é彿¥è¡¨ç¤ºçï¼ä½æ?¯æ?³ç¨å¾ªç¯æ¥å®ç°éå½ï¼?é¤äºåå?éå½åå°¾éå½ï¼ï¼é?½å¿ é¡»å¼å ¥æ ?ç»æè¿è¡åæ ?åºæ ?ã
- ä¸è?¬æ¥è¯´ï¼ééå½çæ?çé«?äºéå½ãèä¸éå½å½æ°è°?ç¨æ?¯æå¼éçï¼éå½ç次æ°åå æ ?大å°çé?å?¶ã
ä¸èµ·è¿æ¥å¦ä¹
- Fork æ?ç项ç®å¹¶æ?äº¤ä½ ç
idea - Pull Request
- Merge
çº é
妿大家åç°æä»ä¹?ä¸å¯¹çå°æ¹ï¼å¯ä»¥åèµ·ä¸ä¸ªissueæ?è pull request,æ?ä¼åæ¶çº æ£
è¡¥å :åèµ·pull requestçcommit message请åè?æç« Commit message å Change log ç¼åæå
è´è°¢
æè°¢ä»¥ä¸æåçissueæ?pull requestï¼
-
License
MIT

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
