µ±Ç°Î»ÖãºÊ×Ò³ > 2013¡¶¼ÆËã»úËã·¨Éè¼ÆÓë·ÖÎö¡·Ï°Ìâ¼°´ð°¸
ËÄ¡¢Ö¤Ã÷Ìâ
1.¾Ù·´ÀýÖ¤Ã÷0/1±³°üÎÊÌâÈôʹÓõÄËã·¨Êǰ´ÕÕpi/wiµÄ·ÇµÝ¼õ´ÎÐò¿¼ÂÇÑ¡ÔñµÄÎïÆ·£¬¼´Ö»ÒªÕýÔÚ±»¿¼ÂǵÄÎïÆ·×°µÃ½ø¾Í×°Èë±³°ü£¬Ôò´Ë·½·¨²»Ò»¶¨Äܵõ½×îÓŽ⣨´ËÌâ˵Ã÷0/1±³°üÎÊÌâÓë±³°üÎÊÌâµÄ²»Í¬£©¡£
Ö¤Ã÷£º¾ÙÀýÈ磺p={7,4,4},w={3,2,2},c=8ʱ£¬ÓÉÓÚ7/3×î´ó£¬Èô°´ÌâĿҪÇóµÄ·½·¨£¬Ö»ÄÜÈ¡µÚÒ»¸ö£¬½âΪ{1,0,0}£¬Èë°üÖØÁ¿ÊÇ7£¬¼ÛֵΪ3¡£¶ø´ËʵÀýµÄ×î´ó¼ÛÖµÓ¦¸ÃÊÇ4£¬È¡µÚ2£¬3 ¸ö£¬×îÓŽâΪ{0,1,1}¡£
2.ÂÃÐмÒÒªÂÃÐÐn¸ö³ÇÊУ¬ÒªÇó¸÷¸ö³ÇÊоÀúÇÒ½ö¾ÀúÒ»´ÎÈ»ºó»Øµ½³ö·¢³ÇÊУ¬²¢ÒªÇóËù×ߵķ³Ì×î¶Ì¡£Ö¤Ã÷TSPÎÊÌâÂú×ã×îÓÅÐÔÔÀí
Ö¤Ã÷£ºÉès, s1, s2, ¡, sp, sÊÇ´Ós³ö·¢µÄÒ»Ìõ·¾¶³¤¶È×î¶ÌµÄ¼òµ¥»ØÂ·£¬¼ÙÉè´Ósµ½ÏÂÒ»¸ö³ÇÊÐs1ÒѾÇó³ö£¬ÔòÎÊÌâת»¯ÎªÇó´Ós1µ½sµÄ×î¶Ì·¾¶£¬ÏÔÈ»s1, s2, ¡, sp, sÒ»¶¨¹¹³ÉÒ»Ìõ´Ós1µ½sµÄ×î¶Ì·¾¶¡£ ÈçÈô²»È»£¬Éès1, r1, r2, ¡, rq, sÊÇÒ»Ìõ´Ós1µ½sµÄ×î¶Ì·¾¶ÇÒ¾¹ýn-1¸ö²»Í¬³ÇÊУ¬Ôòs, s1, r1, r2, ¡, rq, s½«ÊÇÒ»Ìõ´Ós³ö·¢µÄ·¾¶³¤¶È×î¶ÌµÄ¼òµ¥»ØÂ·ÇÒ±Ès, s1, s2, ¡, sp, sÒª¶Ì£¬´Ó¶øµ¼ÖÂì¶Ü¡£ËùÒÔ£¬TSPÎÊÌâÂú×ã×îÓÅÐÔÔÀí¡£ Îå¡¢ÎÊ(½â)´ðÌâ
1. ÊÔÊö·ÖÖη¨µÄ»ù±¾Ë¼Ïë
·ÖÖη¨µÄ»ù±¾Ë¼ÏëÊǽ«Ò»¸ö¹æÄ£ÎªnµÄÎÊÌâ·Ö½âΪk¸ö¹æÄ£½ÏСµÄ×ÓÎÊÌ⣬ÕâЩ×ÓÎÊÌ⻥Ïà¶ÀÁ¢ÇÒÓëÔÎÊÌâÏàͬ¡£µÝ¹éµØ½âÕâЩ×ÓÎÊÌ⣬Ȼºó½«¸÷¸ö×ÓÎÊÌâµÄ½âºÏ²¢µÃµ½ÔÎÊÌâµÄ½â¡£
2. Éè¼Æ¶¯Ì¬¹æ»®Ëã·¨ÓÐÄÄЩÖ÷Òª²½Öè Éè¼Æ¶¯Ì¬¹æ»®Ëã·¨µÄÖ÷Òª²½ÖèΪ£º
£¨1£©ÕÒ³ö×îÓŽâµÄÐÔÖÊ£¬²¢¿Ì»®Æä½á¹¹ÌØÕ÷¡££¨2£©µÝ¹éµØ¶¨Òå×îÓÅÖµ¡££¨3£©ÒÔ×Ôµ×ÏòÉϵķ½Ê½¼ÆËã³ö×îÓÅÖµ¡££¨4£©¸ù¾Ý¼ÆËã×îÓÅֵʱµÃµ½µÄÐÅÏ¢£¬¹¹Ôì×îÓŽ⡣
3. ·ÖÖη¨Ó붯̬¹æ»®·¨µÄÒìͬ ·ÖÖη¨Ó붯̬¹æ»®·¨µÄÏàͬµãÊÇ£º½«´ýÇó½âµÄÎÊÌâ·Ö½â³ÉÈô¸É¸ö×ÓÎÊÌ⣬ÏÈÇó½â×ÓÎÊÌ⣬Ȼºó´ÓÕâЩ×ÓÎÊÌâµÄ½âµÃµ½ÔÎÊÌâµÄ½â¡£
Á½ÕߵIJ»Í¬µãÊÇ£ºÊʺÏÓÚÓö¯Ì¬¹æ»®·¨Çó½âµÄÎÊÌ⣬¾·Ö½âµÃµ½µÄ×ÓÎÊÌâÍùÍù²»ÊÇ»¥Ïà¶ÀÁ¢µÄ¡£¶øÓ÷ÖÖη¨Çó½âµÄÎÊÌ⣬¾·Ö½âµÃµ½µÄ×ÓÎÊÌâÍùÍùÊÇ»¥Ïà¶ÀÁ¢µÄ¡£
4.±È½Ï·ÖÖ§Ï޽編Óë»ØËÝ·¨µÄÒìͬ
·ÖÖ§Ï޽編Óë»ØËÝ·¨µÄÏàͬµãÊÇ£º¶¼ÊÇÒ»ÖÖÔÚÎÊÌâµÄ½â¿Õ¼äÊ÷TÖÐËÑË÷ÎÊÌâ½âµÄËã·¨¡£²»Í¬µã£º£¨1£©Çó½âÄ¿±ê²»Í¬£»£¨2£©ËÑË÷·½Ê½²»Í¬£»£¨3£©¶ÔÀ©Õ¹½áµãµÄÀ©Õ¹·½Ê½²»Í¬£» £¨4£©´æ´¢¿Õ¼äµÄÒªÇó²»Í¬¡£
5.д³ö»ØËÝ·¨ËÑË÷×Ó¼¯Ê÷µÄËã·¨ ÓûØËÝ·¨ËÑË÷×Ó¼¯Ê÷µÄË㷨Ϊ£º void backtrack (int t) { if (t>n) output(x); else
for (int i=0;i<=1;i++) { x[t]=i;
9
if (constraint(t)&&bound(t)) backtrack(t+1); }
}
6. ·ÖÖη¨ËùÄܽâ¾öµÄÎÊÌâÒ»°ã¾ßÓÐÄÄÐ©ÌØÕ÷ ·ÖÖη¨ËùÄܽâ¾öµÄÎÊÌâÒ»°ã¾ßÓеöÌØÕ÷ÊÇ£º
£¨1£©¸ÃÎÊÌâµÄ¹æÄ£ËõСµ½Ò»¶¨µÄ³Ì¶È¾Í¿ÉÒÔÈÝÒ׵ؽâ¾ö£»
£¨2£©¸ÃÎÊÌâ¿ÉÒÔ·Ö½âΪÈô¸É¸ö¹æÄ£½ÏСµÄÏàͬÎÊÌ⣬¼´¸ÃÎÊÌâ¾ßÓÐ×îÓÅ×ӽṹÐÔÖÊ; £¨3£©ÀûÓøÃÎÊÌâ·Ö½â³öµÄ×ÓÎÊÌâµÄ½â¿ÉÒԺϲ¢Îª¸ÃÎÊÌâµÄ½â£» £¨4£©ÔÎÊÌâËù·Ö½â³öµÄ¸÷¸ö×ÓÎÊÌâÊÇÏ໥¶ÀÁ¢µÄ£¬¼´×ÓÎÊÌâÖ®¼ä²»°üº¬¹«¹²µÄ×ÓÎÊÌâ¡£ 7. ·ÖÖ§Ï޽編Éè¼ÆËã·¨ÓÐÄÄЩ²½Öè Ó÷ÖÖ§Ï޽編Éè¼ÆËã·¨µÄ²½ÖèÊÇ£º
(1)Õë¶ÔËù¸øÎÊÌ⣬¶¨ÒåÎÊÌâµÄ½â¿Õ¼ä£¨¶Ô½â½øÐбàÂ룩£»·Ö (2)È·¶¨Ò×ÓÚËÑË÷µÄ½â¿Õ¼ä½á¹¹£¨°´Ê÷»òͼ×éÖ¯½â£© £»
(3)ÒÔ¹ã¶ÈÓÅÏÈ»òÒÔ×îСºÄ·Ñ£¨×î´óÊÕÒæ£©ÓÅÏȵķ½Ê½ËÑË÷½â¿Õ¼ä£¬²¢ÔÚËÑË÷¹ý³ÌÖÐÓüôÖ¦º¯Êý±ÜÃâÎÞЧËÑË÷¡£
8. ³£¼ûµÄÁ½ÖÖ·ÖÖ§Ï޽編µÄËã·¨¿ò¼ÜÊÇʲô ³£¼ûµÄÁ½ÖÖ·ÖÖ§Ï޽編µÄËã·¨¿ò¼Ü
£¨1£©¶ÓÁÐʽ(FIFO)·ÖÖ§Ï޽編£º°´ÕÕ¶ÓÁÐÏȽøÏȳö£¨FIFO£©ÔÔòѡȡÏÂÒ»¸ö½ÚµãΪÀ©Õ¹½Úµã¡£ £¨2£©ÓÅÏȶÓÁÐʽ·ÖÖ§Ï޽編£º°´ÕÕÓÅÏȶÓÁÐÖй涨µÄÓÅÏȼ¶Ñ¡È¡ÓÅÏȼ¶×î¸ßµÄ½Úµã³ÉΪµ±Ç°À©Õ¹½Úµã¡£
9. »ØËÝ·¨Öг£¼ûÄÄÁ½ÀàµäÐ͵Ľâ¿Õ¼äÊ÷£¿·ÖÎö¸÷×ÔµÄʹÓó¡ºÏ¼°Ê±¼ä¸´ÔÓ¶È¡£ »ØËÝ·¨Öг£¼ûµÄÁ½ÀàµäÐ͵Ľâ¿Õ¼äÊ÷ÊÇ×Ó¼¯Ê÷ºÍÅÅÁÐÊ÷¡£
µ±Ëù¸øµÄÎÊÌâÊÇ´Ón¸öÔªËØµÄ¼¯ºÏSÖÐÕÒ³öÂú×ãijÖÖÐÔÖʵÄ×Ó¼¯Ê±£¬ÏàÓ¦µÄ½â¿Õ¼äÊ÷³Æ
nn
Ϊ×Ó¼¯Ê÷¡£ÕâÀà×Ó¼¯Ê÷ͨ³£ÓÐ2¸öÒ¶½áµã£¬±éÀú×Ó¼¯Ê÷ÐèO(2)¼ÆËãʱ¼ä ¡£
µ±Ëù¸øµÄÎÊÌâÊÇÈ·¶¨n¸öÔªËØÂú×ãijÖÖÐÔÖʵÄÅÅÁÐʱ£¬ÏàÓ¦µÄ½â¿Õ¼äÊ÷³ÆÎªÅÅÁÐÊ÷¡£ÕâÀàÅÅÁÐÊ÷ͨ³£ÓÐn!¸öÒ¶½áµã¡£±éÀúÅÅÁÐÊ÷ÐèÒªO(n!)¼ÆËãʱ¼ä¡£
10. ·ÖÖ§Ï޽編µÄËÑË÷²ßÂÔÊÇʲô£¿ ·ÖÖ§Ï޽編µÄËÑË÷²ßÂÔÊÇ£º
ÔÚÀ©Õ¹½áµã´¦£¬ÏÈÉú³ÉÆäËùÓеĶù×Ó½áµã£¨·ÖÖ§£©£¬È»ºóÔÙ´Óµ±Ç°µÄ»î½áµã±íÖÐÑ¡ÔñÏÂÒ»¸öÀ©Õ¹½áµã¡£ÎªÁËÓÐЧµØÑ¡ÔñÏÂÒ»À©Õ¹½áµã£¬¼ÓËÙËÑË÷µÄ½ø³Ì£¬ÔÚÿһ¸ö»î½áµã´¦£¬¼ÆËãÒ»¸öº¯ÊýÖµ£¨Ï޽磩£¬²¢¸ù¾Ýº¯ÊýÖµ£¬´Óµ±Ç°»î½áµã±íÖÐÑ¡ÔñÒ»¸ö×îÓÐÀûµÄ½áµã×÷ΪÀ©Õ¹½áµã£¬Ê¹ËÑË÷³¯×Žâ¿Õ¼äÉÏÓÐ×îÓŽâµÄ·ÖÖ§ÍÆ½ø£¬ÒԱ㾡¿ìµØÕÒ³öÒ»¸ö×îÓŽ⡣
11.ʹÓö¯Ì¬¹æ»®·¨Çó½âTSPÎÊÌâ¡£
¸÷¸ö³ÇÊмäµÄ¾àÀë¿ÉÒÔÓôú¼Û¾ØÕóÀ´±íʾ¡£
´øÈ¨Í¼µÄ´ú¼Û¾ØÕó
¼ÙÉèn¸ö¶¥µãÓÃ0¡«n-1µÄÊý×Ö±àºÅ£¬Ê×ÏÈÉú³É1¡«n-1¸öÔªËØµÄ×Ó¼¯´æ·ÅÔÚÊý×éV[2n-1]ÖУ¬ÉèÊý×éd[n][2n-1]´æ·Åµü´ú½á¹û£¬ÆäÖÐd[i][j]±íʾ´Ó¶¥µãi¾¹ý×Ó¼¯V[j]ÖеĶ¥µãÒ»´ÎÇÒ½öÒ»´Î£¬×îºó»Øµ½³ö·¢µã0µÄ×î¶Ì·¾¶³¤¶È¡£
Ìî±í·½·¨£º×Ôµ×ÏòÉÏ£¬Öð²½ÇóÖµ¡£ÀûÓÃǰһ²½Çó³öµÄÖµ¼ÆËã³öºóÒ»²½µÄÖµÌîÈë±íÖУ¬Ã¿
10
Ò»²½½áÊøºóÑ¡Ôñ×îСֵ×÷Ϊ×ÓÎÊÌâµÄ×îÓÅÖµ£¬×îºóÒ»²½ÎªÔÎÊÌâµÄ×îÓŽ⡣
Íê³ÉÒÔϱí¸ñµÄÌîд j {} i 0 1 2 3 5 6 3 µÚ1²½ 9 12 {1} 8 11 µÚ2²½ {2} {3} 6 5 {1,2} 14 {1,3} 10 µÚ3²½ {2,3} 7 {1,2,3} 10 µÚ4²½ ×î¶Ì·¾¶Îª£º0¡ú1¡ú2¡ú3¡ú0£¬×î¶Ì·¾¶³¤¶ÈΪ£º10 Ìî±í¹ý³ÌÈçÏ£º
µÚ1²½£ºÌîдµÚ1ÁУ¬
d(1, {})=c10=5 (1¡ú0)£» d(2, {})=c20=6 (2¡ú0)£» d(3, {})=c30=3 (3¡ú0) µÚ2²½£º
d(1, {2})= c12+d(2, {})=2+6=8(1¡ú2) d(1, {3})= c13+d(3, {})=3+3=6(1¡ú3) d(2, {1})= c21+d(1, {})=4+5=9(2¡ú1) d(2, {3})= c23+d(3, {})=2+3=5(2¡ú3) d(3, {1})= c31+d(1, {})=7+5=12(3¡ú1) d(3, {2})= c32+d(2, {})=5+6=11(3¡ú2) µÚ3²½£º
d(1, {2, 3})=min{c12+d(2, {3}), c13+ d(3, {2})}=min{2+5, 3+11}=7(1¡ú2) d(2, {1, 3})=min{c21+d(1, {3}), c23+ d(3, {1})}=min{4+6, 2+12}=10(2¡ú1) d(3, {1, 2})=min{c31+d(1, {2}), c32+ d(2, {1})}=min{7+8, 5+9}=14(3¡ú2) µÚ4²½£º
d(0, {1, 2, 3})=min{c01+ d(1, { 2, 3}), c02+ d(2, {1, 3}), c03+ d(3, {1, 2})} =min{3+7, 6+10, 7+14}=10(0¡ú1) Áù¡¢Ëã·¨Éè¼ÆÌâ
1. ¸ø¶¨ÒѰ´ÉýÐòÅźÃÐòµÄn¸öÔªËØa[0:n-1]£¬ÏÖÒªÔÚÕân¸öÔªËØÖÐÕÒ³öÒ»ÌØ¶¨ÔªËØx£¬·µ»ØÆäÔÚÊý×éÖеÄλÖã¬Èç¹ûδÕÒµ½·µ»Ø-1¡£ д³ö¶þ·ÖËÑË÷µÄËã·¨£¬²¢·ÖÎöÆäʱ¼ä¸´ÔÓ¶È¡£
template
int BinarySearch(Type a[], const Type& x, int n)
{//ÔÚa[0:n]ÖÐËÑË÷x£¬ÕÒµ½xʱ·µ»ØÆäÔÚÊý×éÖеÄλÖ㬷ñÔò·µ»Ø-1 Int left=0; int right=n-1; While (left<=right)
{int middle=(left+right)/2;
if (x==a[middle]) return middle; if (x>a[middle]) left=middle+1; else right=middle-1; }
Return -1;
}
ʱ¼ä¸´ÔÓÐÔΪO(logn)
11
2. ÀûÓ÷ÖÖÎË㷨д³öºÏ²¢ÅÅÐòµÄËã·¨£¬²¢·ÖÎöÆäʱ¼ä¸´ÔÓ¶È void MergeSort(Type a[], int left, int right) {
if (left merge(a, b, left, i, right); //ºÏ²¢µ½Êý×éb copy(a, b, left, right); //¸´ÖÆ»ØÊý×éa } } Ëã·¨ÔÚ×Çé¿öϵÄʱ¼ä¸´ÔÓ¶ÈΪO(nlogn)¡£ 3.N»Êºó»ØËÝ·¨ bool Queen::Place(int k) { //¼ì²éx[k]λÖÃÊÇ·ñºÏ·¨ for (int j=1;j if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false; return true; } void Queen::Backtrack(int t) { if (t>n) sum++; else for (int i=1;i<=n;i++) {x[t]=i; if ( Ô¼Êøº¯Êý ) Backtrack(t+1); } } 4.×î´óÍÅÎÊÌâ void Clique::Backtrack(int i) // ¼ÆËã×î´óÍÅ { if (i > n) { // µ½´ïÒ¶½áµã for (int j = 1; j <= n; j++) bestx[j] = x[j]; bestn = cn; return;} // ¼ì²é¶¥µã i Ó뵱ǰÍŵÄÁ¬½Ó int OK = 1; for (int j = 1; j < i; j++) if (x[j] && a[i][j] == 0) // iÓëj²»ÏàÁ¬ {OK = 0; break;} if (OK ) { // ½øÈë×ó×ÓÊ÷ x[i] = 1; cn++; Backtrack(i+1); x[i] = 0; cn--; } if (cn+n-i>bestn) { // ½øÈëÓÒ×ÓÊ÷ x[i] = 0; Backtrack(i+1); } 12
¹²·ÖÏí92ƪÏà¹ØÎĵµ