Ò» Ò»¸öÎÊÌâ
ÔÚStackOverflowÉÏÓÐÕâôһ¸öÎÊÌâ Why is processing a sorted
array faster than an unsorted array? ¡£Àý×ÓÖУ¬¶ÔÒ»¸öÊý×é½øÐÐÌõ¼þÇóºÍ£¬ÔÚÅÅÐòǰºÍÅÅÐòºó£¬ÐÔÄÜÓкܴóµÄ²î±ð¡£ÔʼµÄÀý×ÓÊÇC++ºÍJavaµÄ£¬ÕâÀォÆä»»³ÉÁËC#
£º
static void Main(string[] args)
{
// Generate data
int arraySize;
int[] data;
Random rnd;
arraySize = 32768;
data = new int[arraySize];
rnd = new Random(0);
for (int c = 0; c < arraySize; ++c)
data[c] = rnd.Next(256);
// Test
long sum = 0;
CodeTimer.Time("unsorted array", 100000, () =>
{
for (int c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
});
Array.Sort(data);
sum = 0;
CodeTimer.Time("sorted array", 100000, () =>
{
for (int c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
});
Console.ReadKey();
} |
´úÂëÖÐÊ×Ïȳõʼ»¯ÁËÒ»¸ö 32768´óСµÄintÐÍÊý×飬¸øÕâ¸öÊý×éµÄÿ¸öÔªËØËæ»ú¸³Óè0-256Ö®¼äµÄÖµ£¬È»ºó¶Ô¸ÃÊý×éÖдóÓÚ128²¿·ÖµÄÊý¾Ý½øÐÐÇóºÍ£¬²¢½«Õâ¸ö¹ý³ÌÀÛ¼Ó100000´Î¡£È»ºó·Ö±ð²âÁ¿Êý×éÔÚÅÅÐòǰºÍÅÅÐòºóµÄ
ºÄʱ¡£ ÕâÀïʹÓÃÁËÀÏÕÔµÄCodeTimer¹¤¾ßÀ´£¬±¾ÈË»úÆ÷Xeon? E3-1230 v3@3.30GHz£¬ÔÚdebugÌõ¼þÏ£¬½á¹ûÈçÏ£º

ÔÚreleaseÌõ¼þÏ£¬½á¹ûÈçÏ£º

È»ºó×÷ÕßÌá³öÁËÎÊÌ⣬Ϊʲô½ö½ö¶ÔÊý¾Ý½øÐÐÁËÅÅÐò£¬´¦ÀíËٶȾͿìÁ˽«½üÒ»±¶»¹Òª¶àÄØ£¿
ÅÅÃûµÚÒ»µÄ»Ø´ð£¬½âÊ͵½ÊÇÓÉÓÚ·ÖÖ§Ô¤²â´íÎóµ¼ÖµÄÐÔÄܳͷ££¬ËùÒÔ»á²úÉúÐÔÄܵIJî±ð¡£Òª½âÊÍ·ÖÖ§Ô¤²âµÄ³Í·££¬Ê×ÏÈÀ´¿´Ê²Ã´ÊÇ·ÖÖ§Ô¤²â£¬ÒÔ¼°ÎªÊ²Ã´Ô¤²â´íÎó»áµ¼Ö³ͷ£¡£
¶þ ·ÖÖ§Ô¤²â
ʲôÊÇ·ÖÖ§Ô¤²â? Ö±½Ó˵¼ÆËã»ú¸ÅÄî»òÐí²»Ì«ºÃÀí½â£¬´ð°¸ÒÔÒ»¸öÌú··Ö֧·¿ÚµÄÀý×ÓÀ´ËµÃ÷ÁËʲôÊÇ·ÖÖ§Ô¤²â¡£
¿¼ÂÇÏÂÃæµÄÌú¹ì·ÖÖ§:

¼ÙÉèÔÚ»¹Ã»ÓÐÔ¶¾àÀëÐźÅͨѶµÄʱ´ú¡£ÄãÊÇÒ»¸öÌú··Ö֧·¿ÚµÄ²Ù×÷ÈËÔ±£¬µ±Ìýµ½»ð³µÒªÀ´ÁË£¬Äã¸ù±¾²»ÖªµÀ¼´½«µ½À´µÄÕâÁ¾»ð³µÒª¿ªÍùÄĸö·½Ïò¡£ÓÚÊÇ£¬ÄãÈÃÕâÁ¾»òÕßÍ£ÏÂÀ´£¬ÎÊÁгµ³¤ÕâÁ¾³µÒª¿ªÍùÄǸö·½Ïò£¬È»ºó½«Ìú¹ì°âµ½¶ÔÓ¦µÄ·½ÏòÉÏ¡£
»ð³µÊÇÒ»¸öºÜ±¿ÖصĶ«Î÷£¬Òò´Ë¾ßÓкܴóµÄ¹ßÐÔ£¬ÐèÒª»¨ºÜ¶àʱ¼äÆô¶¯ºÍÍ£Ö¹¡£
ÄÇô£¬ÓÐûÓиüºÃµÄ°ì·¨ÄØ£¿ÄǾÍÊÇ£¬ÓÉÄãÀ´²ÂÕâÁ¾»ð³µÒªÍùÄǸö·½Ïò×ߣ¡
?Èç¹û²Â¶ÔÁË£¬»ð³µ¿ÉÒÔÖ±½Ó¿ªÍùҪȥµÄ·½Ïò
?Èç¹û²Â´íÁË£¬»ð³µÒªÍ£ÏÂÀ´£¬È»ºóµ¹³µ£¬È»ºó½«³µ¹ì°âµ½ÕýÈ·µÄ·½Ïò£¬È»ºó»ð³µÖØÐ¿ªÍùÕýÈ·µÄ·½Ïò¡£
Èç¹ûÄãµÄ²Â²â×ÜÊÇÕýÈ·µÄ£¬ÄÇô»ð³µ¾Í²»ÓÃÍ£ÏÂÀ´ÁË
Èç¹ûÄã¾³£²Â´í£¬ÄÇô»ð³µ¾ÍÒª»¨ºÜ¶àµÄʱ¼äÍ£ÏÂÀ´£¬ºóÍË£¬È»ºóÖØÐ¿ª¶¯¡£
ÏÖÔÚ£¬¿¼ÂÇÒ»¸öifÓï¾ä¡£if Óï¾ä±àÒëΪһ¸ö·ÖÖ§ÅжÏÖ¸Á

Èç¹ûÄãÊÇ´¦ÀíÆ÷£¬Äã¿´µ½ÁËÕâ¸ö·ÖÖ§£¬ÄãÊÂÏÈÍêȫûûÓа취֪µÀ½«´ÓÄǸö·ÖÖ§×ß¡£ÄÇôÔõô°ìÄØ£¿Äã¿ÉÒÔÈÃÖ¸ÁîÔÝÍ££¬µÈ´ýÖ±µ½Ö®Ç°µÄÖ¸ÁîÖ´ÐÐÍê³É£¬È»ºó±È½Ï½á¹û£¬È»ºóÍùÕýÈ·µÄÄǸö·½Ïò×ß¡£
ÏÖ´ú´¦ÀíÆ÷ºÜ¸´ÔÓ£¬²¢ÇÒÓкܳ¤µÄÁ÷Ë®Ïߣ¬Òò´ËÈç¹ûÊÇÕâÑùµÄ»°£¬¾ÍÐèÒªºÜ¶àʱ¼äÀ´Ô¤ÈÈÆô¶¯ºÍÍ£Ö¹¡£
ÄÇô£¬ÓÐûÓиüºÃÒ»µã¶ùµÄ°ì·¨ÄØ£¿ÄãÀ´²ÂÕâ¸öÖ¸ÁÍùÄǸö·½Ïò×ß:
1.Èç¹û²Â¶ÔÁË£¬Óï¾ä¿ÉÒÔ¼ÌÐøÖ´ÐÐ
2.Èç¹û²Â´íÁË£¬´¦ÀíÆ÷»á·ÅÆúÕû¸öÁ÷Ë®Ïߣ¬È»ºó»ØÍ˵½·ÖÖ§µØ·½£¬¼ÌÐø³¯ÕýÈ·µÄ·ÖÖ§Ö´ÐС£
Èç¹ûÿ´Î¶¼²Â¶Ô£¬ÄÇô´¦ÀíÆ÷²»ÐèÒªÔÝÍ£¿ÉÒÔÒ»Ö±Ö´ÐÐ
Èç¹û¾³£²Â´í£¬ÄÇô´¦ÀíÆ÷¾ÍÒª»°ºÜ¶àʱ¼äÀ´ÔÝÍ££¬»ØÍË£¬È»ºóÖØÐÂÆô¶¯¡£
Õâ¾ÍÊÇ·ÖÖ§Ô¤²â£¬ËäÈ»Óûð³µÌú¹ìµÄ·½Ê½À´½âÊÍ¿ÉÄܲ»Ì«Ç¡µ±£¬ÒòΪͨ¹ýÆìÖÄ»òÕßÐźſÉÒÔÌáǰ֪ͨҪÍùÄǸö·½Ïò¡£
µ«ÊǶÔÓÚ¼ÆËã»úÀ´Ëµ£¬´¦ÀíÆ÷ÌáǰÊDz»ÖªµÀ½«ÒªÖ´ÐÐÄǸö·ÖÖ§µÄ£¬Ö»Óеȵ½Ö´Ðе½·ÖÖ§ÅжϵÄÄÇÒ»¿Ì£¬ÖµÇó³öÀ´Ö®ºó²Å¿ÉÒÔÈ·¶¨¡£
Òò´ËÈçºÎ²ÉÓÃÒ»ÖÖ²ßÂÔÀ´¼õÉÙ³ö´íµÄ´ÎÊý£¬¼õÉÙÀàËÆ»ð³µÍ£³µ£¬µ¹³µ£¬ÔÙÆô¶¯µÄÎÊÌâÄØ£¿ºÜ×ÔÈ»µÄ£¬¿ÉÒÔ¸ù¾ÝÒÔÍùµÄÇéÐÎÀ´Íƶϣ¡Èç¹ûÕâ¸ö»ð³µÒÔǰÓÐ99%µÄÇé¿ö×ß×ó±ß£¬ÄÇô¾Í¿ÉÒÔÔÚ»ð³µÀ´Ö®Ç°²Â²âËû×ß×ó±ß¡£Èç¹ûÐÐΪ·¢Éú±ä»¯£¬¿ÉÒÔ×öÏàÓ¦µÄµ÷Õû¡£Èç¹û·¢ÏÖÿ3´Îµ÷ÕûÒ»´Î·½Ïò£¬ÄÇô×ܽá³öÕâ¸ö¹æÂɺó¾Í¿ÉÒÔ×ö³öÊʵ±µÄµ÷Õû¡£
»»¾ä»°Ëµ£¬ÎÒÃÇÐèÒª×ܽá³öһЩģʽ£¬È»ºó×ñÑ¡£Õâ»ò¶à»òÉÙ¾ÍÊÇ·ÖÖ§Ô¤²âÆ÷µÄ¹¤×÷¡£
´ó¶àÊýµÄÓ¦Óö¼ÓÐÐÐΪÁ¼ºÃµÄ·ÖÖ§¡£Òò´ËÏÖ´úµÄ·ÖÖ§Ô¤²âÆ÷Äܵ½´ïµ½90%ÒÔÉϵÄÔ¤²âÕýÈ·ÂÊ¡£µ«ÊÇÃæ¶ÔһЩ²»¿ÉÔ¤¼ûµÄ·ÖÖ§ºÍ²»¿ÉÖªµÄģʽ£¬·ÖÖ§Ô¤²âÆ÷¾ÍûÓжà´óÓÃÁË¡£
ͨ¹ýÉÏÃæµÄÃèÊö£¬³öÏÖÐÔÄܲî±ðµÄÎÊÌâ¹Ø¼üÔÚÓÚÕâ¸öifÓï¾ä£º
if (data[c] >= 128) sum += data[c]; |
×¢Òâµ½dataÕâ¸öÊý×éÀïÃæµÄÖµÊÇÆ½¾ù·Ö²¼ÓÚ0-255Ö®¼äµÄ¡£µ±Êý¾ÝÅźÃÐòÖ®ºó£¬Ç°°ë²¿·ÖµÄÊý¾Ý¶¼»áСÓÚ128£¬ËùÒÔ²»»á½øµ½ifÓï¾äÀïÃæ£¬ºó°ë²¿·ÖµÄÖµ¶¼´óÓÚ128£¬ËùÒÔ»á½øµ½Ñ»·Óï¾ä¡£
ÕâÖÖ¹æÂɶÔÓÚ·ÖÖ§Ô¤²âÆ÷·Ç³£ÓѺã¬ÒòΪ·ÖÖ§ÅжÏÓï¾ä·¢ÏÖ×ÜÊÇÑ¡Ôñij¸ö·½ÏòºÜ¶à´Î£¬ÓÚÊǾͺÜÈÝÒ××ö³öÅжϡ£¼´Ê¹Ò»¸ö¼òµ¥µÄ¼ÆÊýÆ÷¾Í¿ÉÒÔÕýÈ·Ô¤²â·ÖÖ§µÄ·½Ïò£¬³ýÁ˸ı䷽ÏòÖ®ºóµÄÒ»Á½´ÎÔ¤²âʧ°ÜÖ®Íâ¡£
ÏÂÃæÃèÊöÁËÀíÆ÷ÔÚ·ÖÖ§Ô¤²âʱµÄÐÐΪ£º
T = ¸Ã·ÖÖ§±»Ñ¡ÖÐ
N = ¸Ã·Ö֧ûÓб»Ñ¡Ôñ
data[] = 0, 1, 2, 3, 4, ... 126, 127, 128, 129, 130, ... 250, 251, 252, ...
branch = N N N N N ... N N T T T ... T T T ...
= NNNNNNNNNNNN ... NNNNNNNTTTTTTTTT ... TTTTTTTTTT (ºÜÈÝÒ×½øÐÐÔ¤²â) |
¿ÉÒÔ¿´µ½£¬µ±Êý¾ÝÅźÃÐòÖ®ºó£¬¶Ô·ÖÖ§Ô¤²âÆ÷Ê®·ÖÓѺ㬺ÜÈÝÒ×½øÐÐÔ¤²â¡£
µ«ÊÇ£¬µ±Êý¾ÝÍêÈ«ÊÇËæ»úµÄʱºò£¬·ÖÖ§Ô¤²âÆ÷±ãʧȥÁËÓô¦£¬ÒòΪËûÎÞ·¨Ô¤²âËæ»úµÄÊý¾Ý¡£Òò´Ë»áÓдó¸Å50%µÄÔ¤²âʧ°ÜÂÊ¡£
data[] = 226, 185, 125, 158, 198, 144, 217, 79, 202, 118, 14, 150, 177, 182, 133, ...
branch = T, T, N, T, T, T, T, N, T, N, N, T, T, T, N ...
= TTNTTTTNTNNTTTN ... (»ù±¾ÉÏËæ»ú³öÏÖ ¨C ºÜÄÑÔ¤²â) |
ÄÇôÔõô°ìÄØ£¿
Èç¹û¼ÆËã»úûÓа취½«·ÖÖ§ÓÅ»¯³ÉÌõ¼þ×ªÒÆ£¬Ò²¿ÉÒÔʹÓÃһЩ¼¼ÇÉ£¬ÎþÉüһЩ¿É¶ÁÐÔ£¬ÒƳýÌõ¼þÅжϣ¬À´Ìá¸ßÐÔÄÜ
±ÈÈ磬¿ÉÒÔ½«ÏÂÃæµÄ·ÖÖ§Óï¾ä£º
if (data[c] >= 128) sum += data[c]; |
Ìæ»»Îª£º
int t = (data[c] - 128) >> 31; sum += ~t & data[c]; |
ÕâÀïʹÓÃÁËλÔËËã£¬ÒÆ³ýÁË·ÖÖ§Ô¤²â¡£ ÒÆ³ý·ÖÖ®ºó£¬ÔÙ½øÐвâÊÔ£¬ÔÚreleaseÌõ¼þÏ£¬½á¹ûÈçÏ£º

¿ÉÒÔ¿´µ½£¬ÔÚûÓзÖÖ§ÅжϵÄÌõ¼þÏ£¬¶ÔÓÐÐòºÍÎÞÐòÊý×éµÄ´¦Àí£¬ÔÚËÙ¶ÈÉÏÊDz¶àµÄ¡£
µ«ÊÇ£¬ÎªÊ²Ã´·ÖÖ§Ô¤²âÄܹ»Ìá¸ßÓ¦ÓóÌÐòµÄÖ´ÐÐЧÂÊ£¬Õâ¾ÍÒªÀ´¿´¿´ÏÖ´úCPUµÄÁ÷Ë®ÏßÉè¼ÆÁË¡£
Èý Ö¸ÁîµÄÁ÷Ë®Ïß
Ö¸ÁîµÄÁ÷Ë®Ïß»¯(pipelining)ÊÇÒ»ÖÖÔö¼ÓÖ¸ÁîÍÌÍÂÁ¿(throughput)µÄ·½·¨£¬¼´ÔÚµ¥Î»Ê±¼äÄÚÄܹ»Ìá¸ßͬʱִÐÐÖ¸ÁîµÄ¸öÊý¡£Ëû½«Ò»¸ö»ù±¾µÄÁ÷Ë®Ïß²ð·ÖΪÁ˼¸¸öÁ¬ÐøµÄ£¬¶ÀÁ¢µÄ²½Ö裬ȻºóijЩ²½Öè¾Í¿ÉÒÔͬʱִÐС£
Á÷Ë®Ïß»¯Í¨¹ýͬʱִÐÐһϵÁвÙ×÷Ôö¼ÓÁËÍÌÍÂÁ¿£¬µ«ÊÇËý²¢Ã»ÓмõÉÙÑÓ³Ù£¬¼´²¢Ã»ÓмõÉÙÒ»ÌõÖ¸Áî´ÓÖ´ÐпªÊ¼µ½Ö´ÐнáÊøµÄʱ¼ä£¬ÈÔÒªµÈµ½ÕâһϵÁÐÖ¸ÁîÍê³É¡£Êµ¼ÊÉÏ,Á÷Ë®Ïß»¯ÓÉÓÚ½«Ò»ÌõÖ¸Áî²ð·Ö³ÉÁ˼¸¸ö²½Öè´Ó¶ø¿ÉÄÜ»áÔö¼ÓÑÓ³Ù¡£

ÉÏͼÊÇÒ»¸ö¾ßÓÐ4²ãÁ÷Ë®ÏßµÄʾÒâͼ£¬Ò»°ãµÄÒ»¸ö·½·¨¿ÉÒÔ·ÖΪËĸö²½Ö裬¶ÁȡָÁî(Fetch)£¬Ö¸Áî½âÂë(Decode),ÔËÐÐÖ¸Áî(Execute)ºÍд»ØÔËÐнá¹û(Write
back)¡£
ÉÏ·½»ÒÉ«²¿·ÖÊÇÒ»Á¬´®Î´ÔËÐеÄÖ¸ÁÏ·½»ÒÉ«²¿·ÖÊÇÒÑÖ´ÐÐÍê³ÉµÄÖ¸ÁÖмä°×É«²¿·ÖÊÇÁ÷Ë®Ïß¡£ÏÂÃæÊÇÔÚÿ¸öʱÖÓÖÜÆÚÏÂÖ¸ÁîµÄÖ´ÐÐ״̬¡£

¿É¼û£¬Á÷Ë®Ïß¼¼ÊõµÄÖ÷ҪĿµÄ¾ÍÊÇͨ¹ýÖØµþÁ¬ÐøÖ¸ÁîµÄ²½ÖèÀ´Ìá¸ßÍÌÍÂÁ¿´Ó¶ø»ñµÃÐÔÄÜ£¬Òª×öµ½ÕâÒ»µã£¬¾Í±ØÐëÄܹ»ÊµÏÖÈ·¶¨ÒªÖ´ÐÐÖ¸ÁîµÄÐòÁкÍÏȺó˳Ðò£¬ÕâÑù²ÅÄÜʹÁ÷Ë®ÏßÖгäÂúÁË´ýÖ´ÐеÄÖ¸Áî¡£µ±´¦ÀíÆ÷Óöµ½·ÖÖ§Ìõ¼þÌø×ªÊ±£¬Í¨³£²»ÄÜÈ·¶¨Ö´ÐÐÄǸö·ÖÖ§£¬Òò´Ë´¦ÀíÆ÷²ÉÓ÷ÖÖ§Ô¤²âÆ÷À´²Â²âÿÌõÌø×ªÖ¸ÁîÊÇ·ñ»áÖ´ÐС£Èç¹û²Â²â±È½Ï¿É¿¿£¬ÄÇôÁ÷Ë®ÏßÖоͻá³äÂúÖ¸Áî¡£µ«ÊÇ£¬Èç¹û¶ÔÌø×ªµÄÖ¸Áî²Â²â´íÎó£¬ÄÇô¾ÍÒªÒªÇó´¦ÀíÆ÷¶ªµôËüÕâ¸öÌø×ªÖ¸ÁîºóµÄËùÓÐÒÑ×öµÄ²Ù×÷£¬È»ºóÔÙ¿ªÊ¼ÓôÓÕýȷλÖô¦ÆðʼµÄÖ¸ÁîÈ¥Ìî³äÁ÷Ë®Ïߣ¬¿ÉÒÔ¿´µ½ÕâÖÖÔ¤²â´íÎó»áµ¼ÖºÜÑÏÖØµÄÐÔÄܳͷ££¬»áµ¼Ö´óÔ¼20-40¸öʱÖÓÖÜÆÚµÄÀË·Ñ£¬´Ó¶øµ¼ÖÂÐÔÄܵÄÑÏÖØÏ½µ¡£
ÔÚÕⲿ·Ö¿ªÊ¼´¦ÒѾ˵Ã÷£¬Èç¹û±àÒëÆ÷²»Äܽ«·ÖÖ§Ìø×ªÓÅ»¯ÎªÌõ¼þ×ªÒÆÖ¸Á¿ÉÒÔʹÓÃһЩ¼¼ÇÉ£¬±ÈÈçλÔËËãÀ´ÒƳý·ÖÖ§Åжϡ£
ÄǾÍÊÇ˵£¬Èç¹ûÄܹ»ÓÅ»¯ÎªÌõ¼þ×ªÒÆÖ¸ÁҲÄÜÌáÉýÐÔÄÜ¡£ÔÚ¸ÃÎÊÌâµÄUpdate²¿·Ö£¬ÌáÎÊÕß˵:
¡°GCC 4.6.1 with -O3 or -ftree-vectorize on x64 is
able to generate a conditional move. So there is no
difference between the sorted and unsorted data - both
are fast. ¡±
GCCÊÇC/C++±àÒëÆ÷£¬-O3ÊDZíʾÓÅ»¯¼¶±ð£¬¿ÉÒÔ½«Ìõ¼þÌø×ªÓÅ»¯ÎªÌõ¼þ´«ËÍÖ¸Á´Ó¶øÊ¹µÃÔÚÓÐÐòºÍÎÞÐòÇé¿öÏ£¬¶ÔÊý¾ÝµÄ´¦ÀíͬÑù¸ßЧ£¬ÄÇôÌõ¼þ×ªÒÆÖ¸ÁîÊÇÊ²Ã´ÄØ£¿
ËÄ Ìõ¼þ´«ËÍÖ¸Áî
¹ØÓÚÌõ¼þ´«ËÍÖ¸ÁÔÚCSAPPÕâ±¾ÊéµÄµÚ3.6.6²¿·ÖÓнÌÏêϸµÄ½éÉÜ¡£ÕâÀïÕë¶ÔÕâÒ»¾ßÌåÎÊÌâÏêϸ½éÉÜһϣ¬Ìõ¼þ×ªÒÆÖ¸ÁîÊÇÈçºÎÓÅ»¯Ìõ¼þ·ÖÖ§Åжϣ¬´Ó¶øÀûÓÃÁ÷Ë®Ïß´Ó¶øÌá¸ßÓ¦ÓóÌÐòЧÂʵġ£
Ìõ¼þ´«ËÍÊÇÒ»ÖÖÌõ¼þÌø×ªµÄÒ»ÖÖÌæ»»²ßÂÔ£¬ËûÊ×ÏȾͼÆËã³öÒ»¸öÌõ¼þµÄÁ½ÖÖ½á¹û£¬È»ºóµÈµ½Ö´Ðе½·ÖÖ§Åжϵĵط½£¬¸ù¾ÝÌõ¼þÑ¡ÔñÒ»¸ö½á¹û¡£Ö»ÓÐÔÚһЩÊÜÏÞµÄÌõ¼þÏÂÕâÖÖ²ßÂԲſÉÐУ¬±ÈÈçÕâ¸öÀý×ÓÖеÄÅжÏÊý×ÖÊÇ·ñ´óÓÚ128È»ºóÇóºÍ¡£µ«ÊÇÈç¹û¿ÉÐУ¬¾Í¿ÉÒÔͨ¹ýÒ»Ìõ¼òµ¥µÄÌõ¼þ´«ËÍÖ¸ÁîÀ´ÊµÏÖ£¬¶ø²»ÊÇÐèÒªÌõ¼þÌø×ªÖ¸ÁîÀ´ÊµÏÖ·ÖÖ§Åжϡ£±ÈÈçÏÂÃæµÄÇóÁ½¸öÊýÏà¼õ¾ø¶ÔÖµµÄ·½·¨£¬Èç¹û²»Ê¹ÓÃÌõ¼þ´«ËÍÖ¸Á

ÔڱȽϴóС֮ºó£¬Í¨¹ýÌø×ªÖ¸Á¿ÉÒÔÌø×ªµ½ÕýÈ·µÄ·ÖÖ§È»ºóÖ´ÐнÓÏÂÀ´µÄÂß¼¡£ ÒªÀûÓÃÁ÷Ë®Ïß¼¼Êõ£¬·ÖÖ§Ô¤²âÆ÷²»ÄÜÒÀÀµÉÏÒ»²½ÖèµÄ½á¹û³öÀ´ÁËÔÙÈ¥×öÅжϣ¬Ëü²»¿ÉÄܵȵ½cmplÖ´ÐÐÍê³ÉÔÙȥѡÔñ·ÖÖ§£¬ËüÐèÒªÌáǰ×ö³öÅжϣ¬Èç¹ûÅжÏÕýÈ·£¬Ã»ÓÐÎÊÌ⣬Èç¹û´íÎ󣬾ÍÓбȽÏÑÏÖØµÄ´íÎó³Í·££¬´Ó¶øÓ°ÏìÓ¦ÓóÌÐòÐÔÄÜ¡£
µ«ÊÇ£¬Èç¹ûʹÓÃÌõ¼þÌø×ª£¬Çé¿öÈçÏ£º

Ê×ÏȼÆËã³öÁËÁ½¸ö·ÖÖ§µÄ½á¹û£¬È»ºóÅжÏÌõ¼þ£¬¶ÔÁ½¸ö·ÖÖ§µÄ½á¹û×ö³öÑ¡Ôñ¡£ÕâÀïÃæ¾ÍûÓзÖÖ§ÅжϺÍÌø×ªÖ¸Áͨ¹ýÒ»ÌõcmovlÖ¸Áî
(c±íʾÌõ¼þ£¬l±íʾless)¾Í¿ÉÒÔÍê³ÉÅжϺ͸³Öµ£¬ÕâÑù·ÖÖ§Ô¤²âÆ÷²»ÐèÒª×ö³ö·ÖÖ§Åжϣ¬Äܹ»ÀûÓÃÁ÷Ë®Ïߣ¬´Ó¶øÌá¸ßÓ¦ÓóÌÐòÐÔÄÜ¡£
µ«ÊÇ£¬Ê¹ÓÃÌõ¼þ´«ËÍÒ²²»×ÜÊÇÄܹ»Ìá¸ß´úÂëЧÂÊ¡£Èç¹ûÌõ¼þµÄÁ½¸ö·ÖÖ§¶¼ÐèÒª´óÁ¿µÄ¼ÆË㣬ÄÇôʵÏÖ¼ÆËã³öÀ´¾ÍÐèÒªºÜ¶àʱ¼ä£¬µ±Ìõ¼þ²»Âú×ãʱ£¬Õⲿ·Ö¹¤×÷¾ÍÀË·ÑÁË¡£±àÒëÆ÷±ØÐëÔÚÌõ¼þ´«ËÍÀ˷ѵļÆËãʱ¼äºÍ·ÖÖ§Ô¤²â´íÎóÔì³ÉµÄÐÔÄÜ´¦·£Ö®¼ä×ö³öȨºâ¡£Ò»°ãµÄ£¬Ö»ÓÐÔÚ·ÖÖ§´¦µÄÁ½¸ö±í´ïʽ¶¼ºÜÈÝÒ×¼ÆËãʱ£¬±ÈÈçÖ»ÓÐÒ»Ìõ¼Ó·¨Ö¸Á¾ÍÏñ±¾ÀýÖеġ±
sum += data[c]; ¡° ÕâÑù£¬Ìõ¼þ´«ËÍÌæ»»Ìõ¼þÌø×ª²ÅÄÜÌá¸ßЧÂÊ¡£×ܵÄÀ´Ëµ£¬Ìõ¼þÊý¾Ý´«ËÍÌṩÁËÒ»ÖÖÓÃÌõ¼þ×ªÒÆÀ´ÊµÏÖÌõ¼þ²Ù×÷µÄÌæ»»²ßÂÔ£¬ËûÖ»ÄÜÓÃÓÚһЩºÜ¼òµ¥µÄ³¡¾°£¬µ«ÊÇÕâÖÖÇé¿ö»¹ÊDZȽϳ£¼ûµÄ£¬ËüÄܹ»³ä·ÖÀûÓÃÏÖ´ú´¦ÀíÆ÷µÄÁ÷Ë®Ïß´Ó¶øÌá¸ßЧÂÊ¡£
Îå ½áÂÛ
±¾ÎÄÊ×ÏÈÒýÓÃÁËStackOverflowÉϵÄÒ»¸öÎÊÌâ¼°Æä½â´ð˵Ã÷ÁË·ÖÖ§Ô¤²â´íÎó¶ÔÓ¦ÓÚ³ÌÐòÐÔÄܵÄÓ°Ï죬Ȼºó¼òµ¥·ÖÎöÁËÏÖ´ú´¦ÀíÆ÷Á÷Ë®ÏßÖÐÈçºÎʹÓ÷ÖÖ§Ô¤²âÌá¸ßÓ¦ÓóÌÐòÐÔÄÜÒÔ¼°·ÖÖ§Ô¤²â´íÎóµ¼ÖµÄÐÔÄܳͷ££¬×îºó½áºÏÎÊÌâ¸ø³öµÄʹÓü¼ÇÉÌæ»»·ÖÖ§Åжϣ¬¼òÒª·ÖÎöÁËΪʲôͨ¹ý½«Ìõ¼þÌø×ªÓÅ»¯ÎªÌõ¼þ´«ËÍÄܹ»³ä·ÖÀûÓÃÖ¸ÁîÁ÷Ë®Ïߣ¬´Ó¶øÍ¬ÑùÄܹ»Ìá¸ß³ÌÐòÐÔÄÜ¡£
|