Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
´ÓK½üÁÚËã·¨¡¢¾àÀë¶ÈÁ¿Ì¸µ½KDÊ÷¡¢SIFT+BBFËã·¨£¨¶þ£©
 

×÷Õß Yarkin£¬ »ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-09-03

  6244  次浏览      30
 

µÚ¶þ²¿·Ö¡¢K½üÁÚËã·¨µÄʵÏÖ£ºKDÊ÷

2.0¡¢±³¾°

֮ǰblogÄÚÔø¾­½éÉܹýSIFTÌØÕ÷Æ¥ÅäËã·¨£¬ÌØÕ÷µãÆ¥ÅäºÍÊý¾Ý¿â²é¡¢Í¼Ïñ¼ìË÷±¾ÖÊÉÏÊÇͬһ¸öÎÊÌ⣬¶¼¿ÉÒÔ¹é½áΪһ¸öͨ¹ý¾àÀ뺯ÊýÔÚ¸ßάʸÁ¿Ö®¼ä½øÐÐÏàËÆÐÔ¼ìË÷µÄÎÊÌ⣬ÈçºÎ¿ìËÙ¶ø×¼È·µØÕÒµ½²éѯµãµÄ½üÁÚ£¬²»ÉÙÈËÌá³öÁ˺ܶà¸ßά¿Õ¼äË÷Òý½á¹¹ºÍ½üËÆ²éѯµÄËã·¨¡£

Ò»°ã˵À´£¬Ë÷Òý½á¹¹ÖÐÏàËÆÐÔ²éѯÓÐÁ½ÖÖ»ù±¾µÄ·½Ê½£º

Ò»ÖÖÊÇ·¶Î§²éѯ£¬·¶Î§²éѯʱ¸ø¶¨²éѯµãºÍ²éѯ¾àÀëãÐÖµ£¬´ÓÊý¾Ý¼¯ÖвéÕÒËùÓÐÓë²éѯµã¾àÀëСÓÚãÐÖµµÄÊý¾Ý

ÁíÒ»ÖÖÊÇK½üÁÚ²éѯ£¬¾ÍÊǸø¶¨²éѯµã¼°ÕýÕûÊýK£¬´ÓÊý¾Ý¼¯ÖÐÕÒµ½¾àÀë²éѯµã×î½üµÄK¸öÊý¾Ý£¬µ±K=1ʱ£¬Ëü¾ÍÊÇ×î½üÁÚ²éѯ¡£

ͬÑù£¬Õë¶ÔÌØÕ÷µãÆ¥ÅäÒ²ÓÐÁ½ÖÖ·½·¨£º

×îÈÝÒ׵İ취¾ÍÊÇÏßÐÔɨÃ裬Ҳ¾ÍÊÇÎÒÃdz£ËµµÄÇî¾ÙËÑË÷£¬ÒÀ´Î¼ÆËãÑù±¾¼¯EÖÐÿ¸öÑù±¾µ½ÊäÈëʵÀýµãµÄ¾àÀ룬Ȼºó³éÈ¡³ö¼ÆËã³öÀ´µÄ×îС¾àÀëµÄµã¼´Îª×î½üÁڵ㡣´ËÖÖ°ì·¨¼òµ¥Ö±°×£¬µ«µ±Ñù±¾¼¯»òѵÁ·¼¯ºÜ´óʱ£¬ËüµÄȱµã¾ÍÁ¢Âí±©Â¶³öÀ´ÁË£¬¾Ù¸öÀý×Ó£¬ÔÚÎïÌåʶ±ðµÄÎÊÌâÖУ¬¿ÉÄÜÓÐÊýǧ¸öÉõÖÁÊýÍò¸öSIFTÌØÕ÷µã£¬¶øÈ¥Ò»Ò»¼ÆËãÕâ³ÉǧÉÏÍòµÄÌØÕ÷µãÓëÊäÈëʵÀýµãµÄ¾àÀ룬Ã÷ÏÔÊDz»×ãÈ¡µÄ¡£

ÁíÍâÒ»ÖÖ£¬¾ÍÊǹ¹½¨Êý¾ÝË÷Òý£¬ÒòΪʵ¼ÊÊý¾ÝÒ»°ã¶¼»á³ÊÏÖ´Ø×´µÄ¾ÛÀàÐÎ̬£¬Òò´ËÎÒÃÇÏëµ½½¨Á¢Êý¾ÝË÷Òý£¬È»ºóÔÙ½øÐпìËÙÆ¥Åä¡£Ë÷ÒýÊ÷ÊÇÒ»ÖÖÊ÷½á¹¹Ë÷Òý·½·¨£¬Æä»ù±¾Ë¼ÏëÊǶÔËÑË÷¿Õ¼ä½øÐвã´Î»®·Ö¡£¸ù¾Ý»®·ÖµÄ¿Õ¼äÊÇ·ñÓлìµþ¿ÉÒÔ·ÖΪClippingºÍOverlappingÁ½ÖÖ¡£Ç°Õß»®·Ö¿Õ¼äûÓÐÖØµþ£¬Æä´ú±í¾ÍÊÇk-dÊ÷£»ºóÕß»®·Ö¿Õ¼äÏ໥Óн»µþ£¬Æä´ú±íΪRÊ÷¡£

¶ø¹ØÓÚRÊ÷±¾blogÄÚ֮ǰÒÑÓнéÉÜ(ͬʱ£¬¹ØÓÚ»ùÓÚRÊ÷µÄ×î½üÁÚ²éÕÒ£¬»¹¿ÉÒÔ¿´ÏÂÕâÆªÎÄÕ£ºhttp://blog.sina.com.cn/s/blog_72e1c7550101dsc3.html)£¬±¾ÎÄ×ÅÖØ½éÉÜk-dÊ÷¡£

1975Ä꣬À´×Ô˹̹¸£´óѧµÄJon Louis BentleyÔÚACMÔÓÖ¾ÉÏ·¢±íµÄһƪÂÛÎÄ£ºMultidimensional Binary Search Trees Used for Associative Searching ÖÐÕýʽÌá³öºÍ²ûÊöµÄÁËÈçÏÂͼÐÎʽµÄ°Ñ¿Õ¼ä»®·ÖΪ¶à¸ö²¿·ÖµÄk-dÊ÷¡£

2.1¡¢Ê²Ã´ÊÇKDÊ÷

Kd-Ê÷ÊÇK-dimension treeµÄËõд£¬ÊǶÔÊý¾ÝµãÔÚkά¿Õ¼ä£¨Èç¶þά(x£¬y)£¬Èýά(x£¬y£¬z)£¬kά(x1£¬y£¬z..)£©Öл®·ÖµÄÒ»ÖÖÊý¾Ý½á¹¹£¬Ö÷ÒªÓ¦ÓÃÓÚ¶àά¿Õ¼ä¹Ø¼üÊý¾ÝµÄËÑË÷£¨È磺·¶Î§ËÑË÷ºÍ×î½üÁÚËÑË÷£©¡£±¾ÖÊÉÏ˵£¬Kd-Ê÷¾ÍÊÇÒ»ÖÖÆ½ºâ¶þ²æÊ÷¡£

Ê×ÏȱØÐë¸ãÇå³þµÄÊÇ£¬k-dÊ÷ÊÇÒ»Öֿռ仮·ÖÊ÷£¬Ëµ°×ÁË£¬¾ÍÊǰÑÕû¸ö¿Õ¼ä»®·ÖÎªÌØ¶¨µÄ¼¸¸ö²¿·Ö£¬È»ºóÔÚÌØ¶¨¿Õ¼äµÄ²¿·ÖÄÚ½øÐÐÏà¹ØËÑË÷²Ù×÷¡£ÏëÏñÒ»¸öÈýά(¶àάÓеãΪÄÑÄãµÄÏëÏóÁ¦ÁË)¿Õ¼ä£¬kdÊ÷°´ÕÕÒ»¶¨µÄ»®·Ö¹æÔò°ÑÕâ¸öÈýά¿Õ¼ä»®·ÖÁ˶à¸ö¿Õ¼ä£¬ÈçÏÂͼËùʾ£º

2.2¡¢KDÊ÷µÄ¹¹½¨

kdÊ÷¹¹½¨µÄα´úÂëÈçÏÂͼËùʾ£º

ÔÙ¾ÙÒ»¸ö¼òµ¥Ö±¹ÛµÄʵÀýÀ´½éÉÜk-dÊ÷¹¹½¨Ëã·¨¡£¼ÙÉèÓÐ6¸ö¶þάÊý¾Ýµã{(2,3)£¬(5,4)£¬(9,6)£¬(4,7)£¬(8,1)£¬(7,2)}£¬Êý¾ÝµãλÓÚ¶þά¿Õ¼äÄÚ£¬ÈçÏÂͼËùʾ¡£ÎªÁËÄÜÓÐЧµÄÕÒµ½×î½üÁÚ£¬k-dÊ÷²ÉÓ÷ֶøÖÎÖ®µÄ˼Ï룬¼´½«Õû¸ö¿Õ¼ä»®·ÖΪ¼¸¸öС²¿·Ö£¬Ê×ÏÈ£¬´ÖºÚÏß½«¿Õ¼äÒ»·ÖΪ¶þ£¬È»ºóÔÚÁ½¸ö×Ó¿Õ¼äÖУ¬Ï¸ºÚÖ±ÏßÓÖ½«Õû¸ö¿Õ¼ä»®·ÖΪËIJ¿·Ö£¬×îºóÐéºÚÖ±Ïß½«ÕâËIJ¿·Ö½øÒ»²½»®·Ö¡£

6¸ö¶þάÊý¾Ýµã{(2,3)£¬(5,4)£¬(9,6)£¬(4,7)£¬(8,1)£¬(7,2)}¹¹½¨kdÊ÷µÄ¾ßÌå²½ÖèΪ£º

1.È·¶¨£ºsplitÓò=x¡£¾ßÌåÊÇ£º6¸öÊý¾ÝµãÔÚx£¬yά¶ÈÉϵÄÊý¾Ý·½²î·Ö±ðΪ39£¬28.63£¬ËùÒÔÔÚxÖáÉÏ·½²î¸ü´ó£¬¹ÊsplitÓòֵΪx£»

2.È·¶¨£ºNode-data = £¨7,2£©¡£¾ßÌåÊÇ£º¸ù¾ÝxάÉϵÄÖµ½«Êý¾ÝÅÅÐò£¬6¸öÊý¾ÝµÄÖÐÖµ(ËùνÖÐÖµ£¬¼´Öмä´óСµÄÖµ)Ϊ7£¬ËùÒÔNode-dataÓòλÊý¾Ýµã£¨7,2£©¡£ÕâÑù£¬¸Ã½ÚµãµÄ·Ö¸î³¬Æ½Ãæ¾ÍÊÇͨ¹ý£¨7,2£©²¢´¹Ö±ÓÚ£ºsplit=xÖáµÄÖ±Ïßx=7£»

3.È·¶¨£º×ó×Ó¿Õ¼äºÍÓÒ×ӿռ䡣¾ßÌåÊÇ£º·Ö¸î³¬Æ½Ãæx=7½«Õû¸ö¿Õ¼ä·ÖΪÁ½²¿·Ö£ºx<=7µÄ²¿·ÖΪ×ó×ӿռ䣬°üº¬3¸ö½Úµã={(2,3),(5,4),(4,7)}£»ÁíÒ»²¿·ÖΪÓÒ×ӿռ䣬°üº¬2¸ö½Úµã={(9,6)£¬(8,1)}£»

ÈçÉÏËã·¨ËùÊö£¬kdÊ÷µÄ¹¹½¨ÊÇÒ»¸öµÝ¹é¹ý³Ì£¬ÎÒÃǶÔ×ó×Ó¿Õ¼äºÍÓÒ×Ó¿Õ¼äÄÚµÄÊý¾ÝÖØ¸´¸ù½ÚµãµÄ¹ý³Ì¾Í¿ÉÒԵõ½Ò»¼¶×ӽڵ㣨5,4£©ºÍ£¨9,6£©£¬Í¬Ê±½«¿Õ¼äºÍÊý¾Ý¼¯½øÒ»²½Ï¸·Ö£¬Èç´ËÍù¸´Ö±µ½¿Õ¼äÖÐÖ»°üº¬Ò»¸öÊý¾Ýµã¡£

Óë´Ëͬʱ£¬¾­¹ý¶ÔÉÏÃæËùʾµÄ¿Õ¼ä»®·ÖÖ®ºó£¬ÎÒÃÇ¿ÉÒÔ¿´³ö£¬µã(7,2)¿ÉÒÔΪ¸ù½áµã£¬´Ó¸ù½áµã³ö·¢µÄÁ½Ìõºì´ÖбÏßÖ¸ÏòµÄ(5,4)ºÍ(9,6)ÔòΪ¸ù½áµãµÄ×óÓÒ×Ó½áµã£¬¶ø(2,3)£¬(4,7)ÔòΪ(5,4)µÄ×óÓÒº¢×Ó(ͨ¹ýÁ½ÌõϸºìбÏßÏàÁ¬)£¬×îºó£¬(8,1)Ϊ(9,6)µÄ×óº¢×Ó(ͨ¹ýϸºìбÏßÏàÁ¬)¡£Èç´Ë£¬±ãÐγÉÁËÏÂÃæÕâÑùÒ»¿Ãk-dÊ÷£º

k-dÊ÷µÄÊý¾Ý½á¹¹

Õë¶ÔÉÏ±í¸ø³öµÄkdÊ÷µÄÊý¾Ý½á¹¹£¬×ª»¯³É¾ßÌå´úÂëÈçÏÂËùʾ(×¢£¬±¾ÎÄÒÔÏ´úÂë·ÖÎö»ùÓÚRob Hessά»¤µÄsift¿â)£º

/** a node in a k-d tree */  
struct kd_node
{
int ki; /**< partition key index *///¹Ø¼üµãÖ±·½Í¼·½²î×î´óÏòÁ¿ÏµÁÐλÖÃ
double kv; /**< partition key value *///Ö±·½Í¼·½²î×î´óÏòÁ¿ÏµÁÐÖÐ×îÖмäÄ£Öµ
int leaf; /**< 1 if node is a leaf, 0 otherwise */
struct feature* features; /**< features at this node */
int n; /**< number of features */
struct kd_node* kd_left; /**< left child */
struct kd_node* kd_right; /**< right child */
};

Ò²¾ÍÊÇ˵£¬Èç֮ǰËùÊö£¬kdÊ÷ÖУ¬kd´ú±ík-dimension£¬Ã¿¸ö½Úµã¼´ÎªÒ»¸ökάµÄµã¡£Ã¿¸ö·ÇÒ¶½Úµã¿ÉÒÔÏëÏóΪһ¸ö·Ö¸î³¬Æ½Ã棬Óô¹Ö±ÓÚ×ø±êÖáµÄ³¬Æ½Ã潫¿Õ¼ä·ÖΪÁ½¸ö²¿·Ö£¬ÕâÑùµÝ¹éµÄ´Ó¸ù½Úµã²»Í£µÄ»®·Ö£¬Ö±µ½Ã»ÓÐʵÀýΪֹ¡£¾­µäµÄ¹¹Ôìk-d treeµÄ¹æÔòÈçÏ£º

Ëæ×ÅÊ÷µÄÉî¶ÈÔö¼Ó£¬Ñ­»·µÄÑ¡È¡×ø±êÖᣬ×÷Ϊ·Ö¸î³¬Æ½ÃæµÄ·¨ÏòÁ¿¡£¶ÔÓÚ3-d treeÀ´Ëµ£¬¸ù½ÚµãѡȡxÖᣬ¸ù½ÚµãµÄº¢×ÓѡȡyÖᣬ¸ù½ÚµãµÄËï×ÓѡȡzÖᣬ¸ù½ÚµãµÄÔøËï×ÓѡȡxÖᣬÕâÑùÑ­»·ÏÂÈ¥¡£

ÿ´Î¾ùΪËùÓжÔӦʵÀýµÄÖÐλÊýµÄʵÀý×÷ΪÇзֵ㣬Çзֵã×÷Ϊ¸¸½Úµã£¬×óÓÒÁ½²àΪ»®·ÖµÄ×÷Ϊ×óÓÒÁ½×ÓÊ÷¡£

¶ÔÓÚn¸öʵÀýµÄkάÊý¾ÝÀ´Ëµ£¬½¨Á¢kd-treeµÄʱ¼ä¸´ÔÓ¶ÈΪO(k*n*logn)¡£

ÒÔÏÂÊǹ¹½¨k-dÊ÷µÄ´úÂ룺

struct kd_node* kdtree_build( struct feature* features, int n )  
{
struct kd_node* kd_root;

if( ! features || n <= 0 )
{
fprintf( stderr, "Warning: kdtree_build(): no features, %s, line %d\n",
__FILE__, __LINE__ );
return NULL;
}

//³õʼ»¯
kd_root = kd_node_init( features, n ); //n--number of features,initinalize root of tree.
expand_kd_node_subtree( kd_root ); //kd tree expand

return kd_root;
}

ÉÏÃæµÄÉæ¼°³õʼ»¯²Ù×÷µÄÁ½¸öº¯Êýkd_node_init£¬¼°expand_kd_node_subtree´úÂë·Ö±ðÈçÏÂËùʾ£º

static struct kd_node* kd_node_init( struct feature* features, int n )  
{ //n--number of features
struct kd_node* kd_node;

kd_node = (struct kd_node*)(malloc( sizeof( struct kd_node ) ));
memset( kd_node, 0, sizeof( struct kd_node ) ); //0Ìî³ä
kd_node->ki = -1; //???????
kd_node->features = features;
kd_node->n = n;

return kd_node;
}

static void expand_kd_node_subtree( struct kd_node* kd_node )  
{
/* base case: leaf node */
if( kd_node->n == 1 || kd_node->n == 0 )
{ //Ò¶½Úµã //αҶ½Úµã
kd_node->leaf = 1;
return;
}

assign_part_key( kd_node ); //get ki,kv
partition_features( kd_node ); //creat left and right children,ÌØÕ÷µãkiλÖÃ×óÊ÷±ÈÓÒÊ÷ģֵС,kv×÷Ϊ·Ö½çÄ£Öµ
//kd_nodeÖйؼüµãÒѾ­ÅÅÐò
if( kd_node->kd_left )
expand_kd_node_subtree( kd_node->kd_left );
if( kd_node->kd_right )
expand_kd_node_subtree( kd_node->kd_right );
}

¹¹½¨ÍêkdÊ÷Ö®ºó£¬Èç½ñ½øÐÐ×î½üÁÚËÑË÷ÄØ£¿´ÓÏÂÃæµÄ¶¯Ì¬gifͼÖУ¬ÄãÊÇ·ñÄÜ¿´³öЩÐí¶ËÄßÄØ£¿

k-dÊ÷Ëã·¨¿ÉÒÔ·ÖΪÁ½´ó²¿·Ö£¬³ýÁËÉϲ¿·ÖÓйØk-dÊ÷±¾ÉíÕâÖÖÊý¾Ý½á¹¹½¨Á¢µÄËã·¨£¬ÁíÒ»²¿·ÖÊÇÔÚ½¨Á¢µÄk-dÊ÷Éϸ÷ÖÖÖîÈç²åÈ룬ɾ³ý£¬²éÕÒ(×îÁÚ½ü²éÕÒ)µÈ²Ù×÷Éæ¼°µÄËã·¨¡£ÏÂÃæ£¬ÔÛÃÇÒÀ´ÎÀ´¿´kdÊ÷µÄ²åÈ롢ɾ³ý¡¢²éÕÒ²Ù×÷¡£

2.3¡¢KDÊ÷µÄ²åÈë

ÔªËØ²åÈëµ½Ò»¸öK-DÊ÷µÄ·½·¨ºÍ¶þ²æ¼ìË÷Ê÷ÀàËÆ¡£±¾ÖÊÉÏ£¬ÔÚżÊý²ã±È½Ïx×ø±êÖµ£¬¶øÔÚÆæÊý²ã±È½Ïy×ø±êÖµ¡£µ±ÎÒÃǵ½´ïÁËÊ÷µÄµ×²¿£¬£¨Ò²¾ÍÊǵ±Ò»¸ö¿ÕÖ¸Õë³öÏÖ£©£¬ÎÒÃÇÒ²¾ÍÕÒµ½Á˽áµã½«Òª²åÈëµÄλÖá£Éú³ÉµÄK-DÊ÷µÄÐÎ×´ÒÀÀµÓÚ½áµã²åÈëʱµÄ˳Ðò¡£¸ø¶¨N¸öµã£¬ÆäÖÐÒ»¸ö½áµã²åÈëºÍ¼ìË÷µÄƽ¾ù´ú¼ÛÊÇO(log2N)¡£

ÏÂÃæ4¸±Í¼(À´Ô´£ºÖйúµØÖÊ´óѧµç×ӿμþ)˵Ã÷Á˲åÈë˳ÐòΪ(a) Chicago, (b) Mobile, (c) Toronto, and (d) Buffalo£¬½¨Á¢¿Õ¼äK-DÊ÷µÄʾÀý£º

Ó¦¸ÃÇå³þ£¬ÕâÀïÃèÊöµÄ²åÈë¹ý³ÌÖУ¬Ã¿¸ö½áµã½«ÆäËùÔ򵀮½Ãæ·Ö¸î³ÉÁ½²¿·Ö¡£Òò±È£¬Chicago ½«Æ½ÃæÉÏËùÓнáµã·Ö³ÉÁ½²¿·Ö£¬Ò»²¿·ÖËùÓеĽáµãx×ø±êֵСÓÚ35£¬ÁíÒ»²¿·Ö½áµãµÄx×ø±êÖµ´óÓÚ»òµÈÓÚ35¡£Í¬ÑùMobile½«ËùÓÐx×ø±êÖµ´óÓÚ35µÄ½áµãÒÔ·Ö³ÉÁ½²¿·Ö£¬Ò»²¿·Ö½áµãµÄY×ø±êÖµÊÇСÓÚ10£¬ÁíÒ»²¿·Ö½áµãµÄY×ø±êÖµ´óÓÚ»òµÈÓÚ10¡£ºóÃæµÄToronto¡¢BuffaloÒ²°´ÕÕÒ»·ÖΪ¶þµÄ¹æÔò¼ÌÐø»®·Ö¡£

2.4¡¢KDÊ÷µÄɾ³ý

KDÊ÷µÄɾ³ý¿ÉÒÔÓõݹé³ÌÐòÀ´ÊµÏÖ¡£ÎÒÃǼÙÉèÏ£Íû´ÓK-DÊ÷ÖÐɾ³ý½áµã£¨a,b£©¡£Èç¹û£¨a,b£©µÄÁ½¸ö×ÓÊ÷¶¼Îª¿Õ£¬ÔòÓÿÕÊ÷À´´úÌæ£¨a,b£©¡£·ñÔò£¬ÔÚ£¨a,b£©µÄ×ÓÊ÷ÖÐѰÕÒÒ»¸öºÏÊʵĽáµãÀ´´úÌæËü£¬Æ©Èç(c,d)£¬ÔòµÝ¹éµØ´ÓK-DÊ÷ÖÐɾ³ý£¨c,d£©¡£Ò»µ©(c,d)ÒѾ­±»É¾³ý£¬ÔòÓã¨c,d£©´úÌæ£¨a,b£©¡£¼ÙÉè(a,b)ÊÇÒ»¸öXʶ±ðÆ÷£¬ÄÇô£¬ËüµÃÌæ´ú½ÚµãҪôÊÇ£¨a,b£©×ó×ÓÊ÷ÖеÄX×ø±ê×î´óÖµµÄ½áµã£¬ÒªÃ´ÊÇ£¨a,b£©ÓÒ×ÓÊ÷ÖÐx×ø±ê×îСֵµÄ½áµã¡£

Ò²¾ÍÊÇ˵£¬¸úÆÕͨ¶þ²æÊ÷(°üÀ¨ÈçÏÂͼËùʾµÄºìºÚÊ÷)½áµãµÄɾ³ýÊÇͬÑùµÄ˼Ï룺Óñ»É¾³ý½ÚµãAµÄ×ó×ÓÊ÷µÄ×îÓÒ½Úµã»òÕßAµÄÓÒ×ÓÊ÷µÄ×î×ó½Úµã×÷ÎªÌæ´úAµÄ½Úµã(±ÈÈ磬ÏÂͼºìºÚÊ÷ÖУ¬ÈôҪɾ³ý¸ù½áµã26£¬µÚÒ»²½±ãÊÇÓÃ23»ò28È¡´ú¸ù½áµã26)¡£

µ±(a,b)µÄÓÒ×ÓÊ÷Ϊ¿Õʱ£¬ÕÒµ½£¨a,b£©×ó×ÓÊ÷ÖоßÓÐx×ø±ê×î´óµÄ½áµã£¬Æ©È磨c,d£©£¬½«(a,b)µÄ×ó×ÓÊ÷·Åµ½(c,d)µÄÓÒ×ÓÊ÷ÖУ¬ÇÒÔÚÊ÷ÖдÓËüµÄÉÏÒ»²ãµÝ¹éµØÓ¦ÓÃɾ³ý¹ý³Ì£¨Ò²¾ÍÊÇ£¨a,b£©µÄ×ó×ÓÊ÷£© ¡£

ÏÂÃæÀ´¾ÙÒ»¸öʵ¼ÊµÄÀý×Ó(À´Ô´£ºÖйúµØÖÊ´óѧµç×ӿμþ£¬Ô­¿Î¼þ´íÎóÒѾ­ÔÚÏÂÎÄÖж©Õý)£¬ÈçÏÂͼËùʾ£¬Ô­Ê¼Í¼Ïñ¼°¶ÔÓ¦µÄkdÊ÷£¬ÏÖÔÚҪɾ³ýͼÖеÄA½áµã£¬Ç뿴һϵÁÐɾ³ý²½Ö裺

Ҫɾ³ýÉÏͼÖнáµãA£¬Ñ¡Ôñ½áµãAµÄÓÒ×ÓÊ÷ÖÐX×ø±êÖµ×îСµÄ½áµã£¬ÕâÀïÊÇC£¬C³ÉΪ¸ù£¬ÈçÏÂͼ£º

´ÓCµÄÓÒ×ÓÊ÷ÖÐÕÒ³öÒ»¸ö½áµã´úÌæÏÈǰCµÄλÖã¬

ÕâÀïÊÇD£¬²¢½«DµÄ×ó×ÓÊ÷תΪËüµÄÓÒ×ÓÊ÷£¬D´úÌæÏÈǰCµÄλÖã¬ÈçÏÂͼ£º

ÔÚDµÄÐÂÓÒ×ÓÊ÷ÖУ¬ÕÒX×ø±ê×îСµÄ½áµã£¬ÕâÀïΪH£¬H´úÌæDµÄλÖã¬

ÔÚDµÄÓÒ×ÓÊ÷ÖÐÕÒµ½Ò»¸öY×ø±ê×îСµÄÖµ£¬ÕâÀïÊÇI£¬½«I´úÌæÔ­ÏÈHµÄλÖ㬴ӶøA½áµã´ÓͼÖÐ˳Àûɾ³ý£¬ÈçÏÂͼËùʾ£º

´ÓÒ»¸öK-DÊ÷ÖÐɾ³ý½áµã(a,b)µÄÎÊÌâ±ä³ÉÁËÔÚ(a,b)µÄ×ÓÊ÷ÖÐѰÕÒx×ø±êΪ×îСµÄ½áµã¡£²»ÐÒµÄÊÇѰÕÒ×îСx×ø±êÖµµÄ½áµã±È¶þ²æ¼ìË÷Ê÷Öнâ¾öÀàËÆµÄÎÊÌâÒª¸´ÔÓµÃ¶à¡£ÌØ±ðÊÇËäÈ»×îСx×ø±êÖµµÄ½áµãÒ»¶¨ÔÚxʶ±ðÆ÷µÄ×ó×ÓÊ÷ÖУ¬µ«ËüͬÑù¿ÉÔÚyʶ±ðÆ÷µÄÁ½¸ö×ÓÊ÷ÖС£Òò´Ë¹ØÏµµ½¼ìË÷£¬ÇÒ±ØÐë×¢Òâ¼ìË÷×ø±ê£¬ÒÔʹÔÚÿ¸öÆæÊý²ã½ö¼ìË÷2¸ö×ÓÊ÷ÖеÄÒ»¸ö¡£

´ÓK-DÊ÷ÖÐɾ³ýÒ»¸ö½áµãÊÇ´ú¼ÛºÜ¸ßµÄ£¬ºÜÇå³þɾ³ý×ÓÊ÷µÄ¸ùÊܵ½×ÓÊ÷Öнáµã¸öÊýµÄÏÞÖÆ¡£ÓÃTPL£¨T£©±íʾÊ÷T×ܵÄ·¾¶³¤¶È¡£¿É¿´³öÊ÷ÖÐ×ÓÊ÷´óСµÄ×ܺÍΪTPL£¨T£©+N¡£ ÒÔËæ»ú·½Ê½²åÈëN¸öµãÐγÉÊ÷µÄTPLÊÇO(N*log2N),Õâ¾ÍÒâζ×Å´ÓÒ»¸öËæ»úÐγɵÄK-DÊ÷ÖÐɾ³ýÒ»¸öËæ»úѡȡµÄ½áµãƽ¾ù´ú¼ÛµÄÉϽçÊÇO(log2N) ¡£

2.5¡¢KDÊ÷µÄ×î½üÁÚËÑË÷Ëã·¨

ÏÖʵÉú»îÖÐÓÐÐí¶àÎÊÌâÐèÒªÔÚ¶àάÊý¾ÝµÄ¿ìËÙ·ÖÎöºÍ¿ìËÙËÑË÷£¬¶ÔÓÚÕâ¸öÎÊÌâ×î³£Óõķ½·¨ÊÇËùνµÄkdÊ÷¡£ÔÚk-dÊ÷ÖнøÐÐÊý¾ÝµÄ²éÕÒÒ²ÊÇÌØÕ÷Æ¥ÅäµÄÖØÒª»·½Ú£¬ÆäÄ¿µÄÊǼìË÷ÔÚk-dÊ÷ÖÐÓë²éѯµã¾àÀë×î½üµÄÊý¾Ýµã¡£ÔÚÒ»¸öNάµÄµÑ¿¨¶ù¿Õ¼äÔÚÁ½¸öµãÖ®¼äµÄ¾àÀëÊÇÓÉÏÂÊö¹«Ê½È·¶¨£º

2.5.1¡¢k-dÊ÷²éѯËã·¨µÄα´úÂë

k-dÊ÷²éѯËã·¨µÄα´úÂëÈçÏÂËùʾ£º

Ëã·¨£ºk-dÊ÷×îÁÚ½ü²éÕÒ  
ÊäÈ룺Kd£¬    //k-d treeÀàÐÍ  
     target  //²éѯÊý¾Ýµã  
Êä³ö£ºnearest£¬ //×îÁÚ½üÊý¾Ýµã  
     dist      //×îÁÚ½üÊý¾ÝµãºÍ²éѯµã¼äµÄ¾àÀë  
  
1. If KdΪNULL£¬ÔòÉèdistΪinfinite²¢·µ»Ø  
2. //½øÐжþ²æ²éÕÒ£¬Éú³ÉËÑË÷·¾¶  
   Kd_point = &Kd£»                   //Kd-pointÖб£´æk-d tree¸ù½ÚµãµØÖ·  
   nearest = Kd_point -> Node-data£»  //³õʼ»¯×î½üÁÚµã  
  
   while£¨Kd_point£©  
   ¡¡¡¡push£¨Kd_point£©µ½search_pathÖУ» //search_pathÊÇÒ»¸ö¶ÑÕ»½á¹¹£¬´æ´¢×ÅËÑË÷·¾¶½ÚµãÖ¸Õë  
  
      If Dist£¨nearest£¬target£© > Dist£¨Kd_point -> Node-data£¬target£©  
   ¡¡¡¡¡¡¡¡nearest  = Kd_point -> Node-data£»    //¸üÐÂ×î½üÁÚµã  
   ¡¡¡¡¡¡¡¡Min_dist = Dist(Kd_point£¬target£©£»  //¸üÐÂ×î½üÁÚµãÓë²éѯµã¼äµÄ¾àÀë  ***/  
   ¡¡¡¡s = Kd_point -> split£»                       //È·¶¨´ý·Ö¸îµÄ·½Ïò  
  
   ¡¡¡¡If target[s] <= Kd_point -> Node-data[s]     //½øÐжþ²æ²éÕÒ  
   ¡¡¡¡¡¡¡¡Kd_point = Kd_point -> left£»  
   ¡¡¡¡else  
   ¡¡¡¡¡¡¡¡Kd_point = Kd_point ->right£»  
   End while  
  
3. //»ØËݲéÕÒ  
   while£¨search_path != NULL£©  
   ¡¡¡¡back_point = ´Ósearch_pathÈ¡³öÒ»¸ö½ÚµãÖ¸Õ룻   //´Ósearch_path¶ÑÕ»µ¯Õ»  
   ¡¡¡¡s = back_point -> split£»                      //È·¶¨·Ö¸î·½Ïò  
  
   ¡¡¡¡If Dist£¨target[s]£¬back_point -> Node-data[s]£© < Max_dist   //Åжϻ¹Ðè½øÈëµÄ×Ó¿Õ¼ä  
   ¡¡¡¡¡¡¡¡If target[s] <= back_point -> Node-data[s]  
   ¡¡¡¡¡¡¡¡¡¡¡¡Kd_point = back_point -> right£»  //Èç¹ûtargetλÓÚ×ó×ӿռ䣬¾ÍÓ¦½øÈëÓÒ×Ó¿Õ¼ä  
   ¡¡¡¡¡¡¡¡else  
   ¡¡¡¡¡¡¡¡¡¡¡¡Kd_point = back_point -> left;    //Èç¹ûtargetλÓÚÓÒ×ӿռ䣬¾ÍÓ¦½øÈë×ó×Ó¿Õ¼ä  
   ¡¡¡¡¡¡¡¡½«Kd_pointѹÈësearch_path¶ÑÕ»£»  
  
   ¡¡¡¡If Dist£¨nearest£¬target£© > Dist£¨Kd_Point -> Node-data£¬target£©  
   ¡¡¡¡¡¡¡¡nearest  = Kd_point -> Node-data£»                 //¸üÐÂ×î½üÁÚµã  
   ¡¡¡¡¡¡¡¡Min_dist = Dist£¨Kd_point -> Node-data,target£©£»  //¸üÐÂ×î½üÁÚµãÓë²éѯµã¼äµÄ¾àÀëµÄ  
   End while

¶ÁÕßÀ´ÐŵãÆÀ@yhxyhxyhx£¬ÔÚ¡°½«Kd_pointѹÈësearch_path¶ÑÕ»£»¡±ÕâÐдúÂëºó£¬Ó¦¸ÃÊǵ÷µ½²½Öè2ÔÙÍùÏÂ×ß¶þ·ÖËÑË÷µÄÂß¼­Ò»Ö±µ½Ò¶½áµã£¬ÎÒдÁËÒ»¸öµÝ¹é°æ±¾µÄ¶þάkd treeµÄËÑË÷º¯ÊýÄã¶Ô±ÈµÄ¿´¿´£º

void innerGetClosest(NODE* pNode, PT point, PT& res, int& nMinDis)  
{
if (NULL == pNode)
return;
int nCurDis = abs(point.x - pNode->pt.x) + abs(point.y - pNode->pt.y);
if (nMinDis < 0 || nCurDis < nMinDis)
{
nMinDis = nCurDis;
res = pNode->pt;
}
if (pNode->splitX && point.x <= pNode->pt.x || !pNode->splitX && point.y <= pNode->pt.y)
innerGetClosest(pNode->pLft, point, res, nMinDis);
else
innerGetClosest(pNode->pRgt, point, res, nMinDis);
int rang = pNode->splitX ? abs(point.x - pNode->pt.x) : abs(point.y - pNode->pt.y);
if (rang > nMinDis)
return;
NODE* pGoInto = pNode->pLft;
if (pNode->splitX && point.x > pNode->pt.x || !pNode->splitX && point.y > pNode->pt.y)
pGoInto = pNode->pRgt;
innerGetClosest(pGoInto, point, res, nMinDis);
}

ÏÂÃæ£¬ÒÔÁ½¸ö¼òµ¥µÄʵÀý(Àý×ÓÀ´×ÔͼÏñ¾Ö²¿²»±äÌØÐÔÌØÕ÷ÓëÃèÊöÒ»Êé)À´ÃèÊö×îÁÚ½ü²éÕҵĻù±¾Ë¼Â·¡£

2.5.2¡¢¾ÙÀý£º²éѯµã£¨2.1,3.1£©

ÐǺűíʾҪ²éѯµÄµã£¨2.1,3.1£©¡£Í¨¹ý¶þ²æËÑË÷£¬Ë³×ÅËÑË÷·¾¶ºÜ¿ì¾ÍÄÜÕÒµ½×îÁÚ½üµÄ½üËÆµã£¬Ò²¾ÍÊÇÒ¶×ӽڵ㣨2,3£©¡£¶øÕÒµ½µÄÒ¶×ӽڵ㲢²»Ò»¶¨¾ÍÊÇ×îÁÚ½üµÄ£¬×îÁÚ½ü¿Ï¶¨¾àÀë²éѯµã¸ü½ü£¬Ó¦¸ÃλÓÚÒÔ²éѯµãΪԲÐÄÇÒͨ¹ýÒ¶×Ó½ÚµãµÄÔ²ÓòÄÚ¡£ÎªÁËÕÒµ½ÕæÕýµÄ×î½üÁÚ£¬»¹ÐèÒª½øÐÐÏà¹ØµÄ¡®»ØËÝ'²Ù×÷¡£Ò²¾ÍÊÇ˵£¬Ëã·¨Ê×ÏÈÑØËÑË÷·¾¶·´Ïò²éÕÒÊÇ·ñÓоàÀë²éѯµã¸ü½üµÄÊý¾Ýµã¡£

ÒÔ²éѯ£¨2.1,3.1£©ÎªÀý£º

1.¶þ²æÊ÷ËÑË÷£ºÏÈ´Ó£¨7,2£©µã¿ªÊ¼½øÐжþ²æ²éÕÒ£¬È»ºóµ½´ï£¨5,4£©£¬×îºóµ½´ï£¨2,3£©£¬´ËʱËÑË÷·¾¶ÖеĽڵãΪ<(7,2)£¬(5,4)£¬(2,3)>£¬Ê×ÏÈÒÔ£¨2,3£©×÷Ϊµ±Ç°×î½üÁڵ㣬¼ÆËãÆäµ½²éѯµã£¨2.1,3.1£©µÄ¾àÀëΪ0.1414£¬

2.»ØËݲéÕÒ£ºÔڵõ½£¨2,3£©Îª²éѯµãµÄ×î½üµãÖ®ºó£¬»ØËݵ½Æä¸¸½Úµã£¨5,4£©£¬²¢ÅжÏÔڸø¸½ÚµãµÄÆäËû×Ó½Úµã¿Õ¼äÖÐÊÇ·ñÓоàÀë²éѯµã¸ü½üµÄÊý¾Ýµã¡£ÒÔ£¨2.1,3.1£©ÎªÔ²ÐÄ£¬ÒÔ0.1414Ϊ°ë¾¶»­Ô²£¬ÈçÏÂͼËùʾ¡£·¢ÏÖ¸ÃÔ²²¢²»ºÍ³¬Æ½Ãæy = 4½»¸î£¬Òò´Ë²»ÓýøÈ루5,4£©½ÚµãÓÒ×Ó¿Õ¼äÖÐ(ͼÖлÒÉ«ÇøÓò)È¥ËÑË÷£»

3.×îºó£¬ÔÙ»ØËݵ½£¨7,2£©£¬ÒÔ£¨2.1,3.1£©ÎªÔ²ÐÄ£¬ÒÔ0.1414Ϊ°ë¾¶µÄÔ²¸ü²»»áÓëx = 7³¬Æ½Ãæ½»¸î£¬Òò´Ë²»ÓýøÈ루7,2£©ÓÒ×Ó¿Õ¼ä½øÐвéÕÒ¡£ÖÁ´Ë£¬ËÑË÷·¾¶ÖеĽڵãÒѾ­È«²¿»ØËÝÍ꣬½áÊøÕû¸öËÑË÷£¬·µ»Ø×î½üÁڵ㣨2,3£©£¬×î½ü¾àÀëΪ0.1414¡£

2.5.3¡¢¾ÙÀý£º²éѯµã£¨2£¬4.5£©

Ò»¸ö¸´ÔÓµãÁËÀý×ÓÈç²éÕÒµãΪ£¨2£¬4.5£©£¬¾ßÌå²½ÖèÒÀ´ÎÈçÏ£º

ͬÑùÏȽøÐжþ²æ²éÕÒ£¬ÏÈ´Ó£¨7,2£©²éÕÒµ½£¨5,4£©½Úµã£¬ÔÚ½øÐвéÕÒʱÊÇÓÉy = 4Ϊ·Ö¸î³¬Æ½ÃæµÄ£¬ÓÉÓÚ²éÕÒµãΪyֵΪ4.5£¬Òò´Ë½øÈëÓÒ×Ó¿Õ¼ä²éÕÒµ½£¨4,7£©£¬ÐγÉËÑË÷·¾¶<(7,2)£¬(5,4)£¬(4,7)>£¬µ«£¨4,7£©ÓëÄ¿±ê²éÕÒµãµÄ¾àÀëΪ3.202£¬¶ø£¨5,4£©Óë²éÕÒµãÖ®¼äµÄ¾àÀëΪ3.041£¬ËùÒÔ£¨5,4£©Îª²éѯµãµÄ×î½üµã£»

ÒÔ£¨2£¬4.5£©ÎªÔ²ÐÄ£¬ÒÔ3.041Ϊ°ë¾¶×÷Ô²£¬ÈçÏÂͼËùʾ¡£¿É¼û¸ÃÔ²ºÍy = 4³¬Æ½Ãæ½»¸î£¬ËùÒÔÐèÒª½øÈ루5,4£©×ó×Ó¿Õ¼ä½øÐвéÕÒ£¬Ò²¾ÍÊǽ«£¨2,3£©½Úµã¼ÓÈëËÑË÷·¾¶ÖеÃ<(7,2)£¬(2,3)>£»ÓÚÊǽÓ×ÅËÑË÷ÖÁ£¨2,3£©Ò¶×ӽڵ㣬£¨2,3£©¾àÀ루2,4.5£©±È£¨5,4£©Òª½ü£¬ËùÒÔ×î½üÁÚµã¸üÐÂΪ£¨2£¬3£©£¬×î½ü¾àÀë¸üÐÂΪ1.5£»

»ØËݲéÕÒÖÁ£¨5,4£©£¬Ö±µ½×îºó»ØËݵ½¸ù½áµã£¨7,2£©µÄʱºò£¬ÒÔ£¨2,4.5£©ÎªÔ²ÐÄ1.5Ϊ°ë¾¶×÷Ô²£¬²¢²»ºÍx = 7·Ö¸î³¬Æ½Ãæ½»¸î£¬ÈçÏÂͼËùʾ¡£ÖÁ´Ë£¬ËÑË÷·¾¶»ØËÝÍ꣬·µ»Ø×î½üÁڵ㣨2,3£©£¬×î½ü¾àÀë1.5¡£

ÉÏÊöÁ½´ÎʵÀý±íÃ÷£¬µ±²éѯµãµÄÁÚÓòÓë·Ö¸î³¬Æ½ÃæÁ½²à¿Õ¼ä½»¸îʱ£¬ÐèÒª²éÕÒÁíÒ»²à×ӿռ䣬µ¼Ö¼ìË÷¹ý³Ì¸´ÔÓ£¬Ð§ÂÊϽµ¡£

Ò»°ãÀ´½²£¬×îÁÙ½üËÑË÷Ö»ÐèÒª¼ì²â¼¸¸öÒ¶×Ó½áµã¼´¿É£¬ÈçÏÂͼËùʾ£º¡¡¡¡

µ«ÊÇ£¬Èç¹ûµ±ÊµÀýµãµÄ·Ö²¼±È½ÏÔã¸âʱ£¬¼¸ºõÒª±éÀúËùÓеĽáµã£¬ÈçÏÂËùʾ£º

Ñо¿±íÃ÷N¸ö½ÚµãµÄKάk-dÊ÷ËÑË÷¹ý³Ìʱ¼ä¸´ÔÓ¶ÈΪ£ºtworst=O£¨kN1-1/k£©¡£

ͬʱ£¬ÒÔÉÏΪÁ˽éÉÜ·½±ã£¬ÌÖÂÛµÄÊǶþά»òÈýάÇéÐΡ£µ«ÔÚʵ¼ÊµÄÓ¦ÓÃÖУ¬ÈçSIFTÌØÕ÷ʸÁ¿128ά£¬SURFÌØÕ÷ʸÁ¿64ά£¬Î¬¶È¶¼±È½Ï´ó£¬Ö±½ÓÀûÓÃk-dÊ÷¿ìËÙ¼ìË÷£¨Î¬Êý²»³¬¹ý20£©µÄÐÔÄܼ±¾çϽµ£¬¼¸ºõ½Ó½ṵ̈À·ÏßÐÔɨÃè¡£¼ÙÉèÊý¾Ý¼¯µÄάÊýΪD£¬Ò»°ãÀ´ËµÒªÇóÊý¾ÝµÄ¹æÄ£NÂú×ãN?2D£¬²ÅÄÜ´ïµ½¸ßЧµÄËÑË÷¡£ËùÒÔÕâ¾ÍÒý³öÁËһϵÁжÔk-dÊ÷Ëã·¨µÄ¸Ä½ø£ºBBFËã·¨£¬ºÍһϵÁÐMÊ÷¡¢VPÊ÷¡¢MVPÊ÷µÈ¸ßά¿Õ¼äË÷ÒýÊ÷(ÏÂÎÄ2.6½ÚkdÊ÷½üÁÚËÑË÷Ëã·¨µÄ¸Ä½ø£ºBBFËã·¨£¬Óë2.7½ÚÇòÊ÷¡¢MÊ÷¡¢VPÊ÷¡¢MVPÊ÷)¡£

2.6¡¢kdÊ÷½üÁÚËÑË÷Ëã·¨µÄ¸Ä½ø£ºBBFËã·¨

ÔÛÃÇ˳×ÅÉÏÒ»½ÚµÄ˼·£¬²Î¿¼Í³¼ÆÑ§Ï°·½·¨Ò»ÊéÉϵÄÄÚÈÝ£¬ÔÙÀ´×ܽáÏÂkdÊ÷µÄ×î½üÁÚËÑË÷Ëã·¨£º

ÊäÈ룺ÒÔ¹¹ÔìµÄkdÊ÷£¬Ä¿±êµãx£»

Êä³ö£ºx µÄ×î½üÁÚ

Ëã·¨²½ÖèÈçÏ£º

1.ÔÚkdÊ÷ÖÖÕÒ³ö°üº¬Ä¿±êµãxµÄÒ¶½áµã£º´Ó¸ù½áµã³ö·¢£¬µÝ¹éµØÏòÏÂËÑË÷kdÊ÷¡£ÈôÄ¿±êµãxµ±Ç°Î¬µÄ×ø±êСÓÚÇзֵãµÄ×ø±ê£¬ÔòÒÆ¶¯µ½×ó×Ó½áµã£¬·ñÔòÒÆ¶¯µ½ÓÒ×Ó½áµã£¬Ö±µ½×Ó½áµãΪҶ½áµãΪֹ¡£

2.ÒÔ´ËÒ¶½áµãΪ¡°µ±Ç°×î½üµã¡±¡£

3.µÝ¹éµÄÏòÉÏ»ØËÝ£¬ÔÚÿ¸ö½áµã½øÐÐÒÔϲÙ×÷£º

£¨a£©Èç¹û¸Ã½áµã±£´æµÄʵÀýµã±Èµ±Ç°×î½üµã¾àÀëÄ¿±êµã¸ü½ü£¬Ôò¸üС°µ±Ç°×î½üµã¡±£¬Ò²¾ÍÊÇ˵ÒÔ¸ÃʵÀýµãΪ¡°µ±Ç°×î½üµã¡±¡£

£¨b£©µ±Ç°×î½üµãÒ»¶¨´æÔÚÓڸýáµãÒ»¸ö×Ó½áµã¶ÔÓ¦µÄÇøÓò£¬¼ì²é×Ó½áµãµÄ¸¸½áµãµÄÁíÒ»×Ó½áµã¶ÔÓ¦µÄÇøÓòÊÇ·ñÓиü½üµÄµã¡£¾ßÌå×ö·¨ÊÇ£¬¼ì²éÁíÒ»×Ó½áµã¶ÔÓ¦µÄÇøÓòÊÇ·ñÒÔÄ¿±êµãλÇòÐÄ£¬ÒÔÄ¿±êµãÓë¡°µ±Ç°×î½üµã¡±¼äµÄ¾àÀëΪ°ë¾¶µÄÔ²»ò³¬ÇòÌåÏཻ£º

Èç¹ûÏཻ£¬¿ÉÄÜÔÚÁíÒ»¸ö×Ó½áµã¶ÔÓ¦µÄÇøÓòÄÚ´æÔÚ¾àÄ¿±êµã¸ü½üµÄµã£¬Òƶ¯µ½ÁíÒ»¸ö×Ó½áµã£¬½Ó×Å£¬¼ÌÐøµÝ¹éµØ½øÐÐ×î½üÁÚËÑË÷£»

Èç¹û²»Ïཻ£¬ÏòÉÏ»ØËÝ¡£

4.µ±»ØÍ˵½¸ù½áµãʱ£¬ËÑË÷½áÊø£¬×îºóµÄ¡°µ±Ç°×î½üµã¡±¼´Îªx µÄ×î½üÁڵ㡣

Èç¹ûʵÀýµãÊÇËæ»ú·Ö²¼µÄ£¬ÄÇôkdÊ÷ËÑË÷µÄƽ¾ù¼ÆË㸴ÔÓ¶ÈÊÇO£¨NlogN£©£¬ÕâÀïµÄNÊÇѵÁ·ÊµÀýÊ÷¡£ËùÒÔ˵£¬kdÊ÷¸üÊÊÓÃÓÚѵÁ·ÊµÀýÊýÔ¶´óÓÚ¿Õ¼äάÊýʱµÄk½üÁÚËÑË÷£¬µ±¿Õ¼äάÊý½Ó½üѵÁ·ÊµÀýÊýʱ£¬ËüµÄЧÂÊ»áѸËÙϽµ£¬Ò»½µ½µµ½¡°½â·Åǰ¡±£ºÏßÐÔɨÃèµÄËÙ¶È¡£

Ò²ÕýÒòΪÉÏÊök×î½üÁÚËÑË÷Ëã·¨µÄµÚ4¸ö²½ÖèÖеÄËùÊö£º¡°»ØÍ˵½¸ù½áµãʱ£¬ËÑË÷½áÊø¡±£¬Ã¿¸ö×î½üÁÚµãµÄ²éѯ±È½ÏÍê³É¹ý³Ì×îÖÕ¶¼Òª»ØÍ˵½¸ù½áµã¶ø½áÊø£¬¶øµ¼ÖÂÁËÐí¶à²»±ØÒª»ØËÝ·ÃÎʺͱȽϵ½µÄ½áµã£¬ÕâЩ¶àÓàµÄËðºÄÔÚ¸ßά¶ÈÊý¾Ý²éÕÒµÄʱºò£¬ËÑË÷ЧÂʽ«±äµÃÏ൱֮µØÏ£¬ÄÇÓÐʲô°ì·¨¿ÉÒԸĽøÕâ¸öԭʼµÄkdÊ÷×î½üÁÚËÑË÷Ëã·¨ÄØ£¿

´ÓÉÏÊö±ê×¼µÄkdÊ÷²éѯ¹ý³Ì¿ÉÒÔ¿´³öÆäËÑË÷¹ý³ÌÖеġ°»ØËÝ¡±ÊÇÓÉ¡°²éѯ·¾¶¡±¾ö¶¨µÄ£¬²¢Ã»Óп¼ÂDzéѯ·¾¶ÉÏһЩÊý¾Ýµã±¾ÉíµÄһЩÐÔÖÊ¡£Ò»¸ö¼òµ¥µÄ¸Ä½øË¼Â·¾ÍÊǽ«¡°²éѯ·¾¶¡±ÉϵĽáµã½øÐÐÅÅÐò£¬Èç°´¸÷×Ô·Ö¸î³¬Æ½Ãæ£¨Ò²³Æbin£©Óë²éѯµãµÄ¾àÀëÅÅÐò£¬Ò²¾ÍÊÇ˵£¬»ØËݼì²é×ÜÊÇ´ÓÓÅÏȼ¶×î¸ß£¨Best Bin£©µÄÊ÷½áµã¿ªÊ¼¡£

Õë¶Ô´ËBBF»úÖÆ£¬¶ÁÕßFeng&ÊéͯµãÆÀµÀ£º

1.ÔÚijһ²ã£¬·Ö¸îÃæÊǵÚkiά£¬·Ö¸îÖµÊÇkv£¬ÄÇô abs(q[ki]-kv) ¾ÍÊÇûÓÐÑ¡ÔñµÄÄǸö·ÖÖ§µÄÓÅÏȼ¶£¬Ò²¾ÍÊǼÆËãµÄÊÇÄÇһάÉϵľàÀ룻

2.ͬʱ£¬´ÓÓÅÏȶÓÁÐÀïÃæÈ¡½ÚµãÖ»ÔÚij´ÎËÑË÷µ½Ò¶½Úµãºó²Å·¢Éú£¬¼ÆËã¹ý¾àÀëµÄ½Úµã²»»á³öÏÖÔÚ¶ÓÁе쬱ÈÈç1~10Õâ10¸ö½Úµã£¬ÄãµÚÒ»´ÎËÑË÷µ½Ò¶½ÚµãµÄ·¾¶ÊÇ1-5-7£¬ÄÇô1£¬5£¬7ÊDz»»á³öÏÖÔÚÓÅÏȶÓÁеġ£»»¾ä»°Ëµ£¬ÓÅÏȶÓÁÐÀïÃæ´æµÄ¶¼ÊDzéѯ·¾¶ÉϽڵã¶ÔÓ¦µÄÏà·´×ӽڵ㣬±ÈÈ磺ËÑË÷×ó×ÓÊ÷£¬¾Í°Ñ¶ÔÓ¦ÕâÒ»²ãµÄÓÒ½Úµã´æ½ø¶ÓÁС£

Èç´Ë£¬¾ÍÒý³öÁ˱¾½ÚÒªÌÖÂÛµÄkdÊ÷×î½üÁÚËÑË÷Ëã·¨µÄ¸Ä½ø£ºBBF£¨Best-Bin-First£©²éѯËã·¨£¬ËüÊÇÓÉ·¢Ã÷siftËã·¨µÄDavid LoweÔÚ1997µÄһƪÎÄÕÂÖÐÕë¶Ô¸ßάÊý¾ÝÌá³öµÄÒ»ÖÖ½üËÆËã·¨£¬´ËËã·¨ÄÜÈ·±£ÓÅÏȼìË÷°üº¬×î½üÁÚµã¿ÉÄÜÐԽϸߵĿռ䣬´ËÍ⣬BBF»úÖÆ»¹ÉèÖÃÁËÒ»¸öÔËÐг¬Ê±ÏÞ¶¨¡£²ÉÓÃÁËBBF²éѯ»úÖÆºó£¬kdÊ÷±ã¿ÉÒÔÓÐЧµÄÀ©Õ¹µ½¸ßάÊý¾Ý¼¯ÉÏ¡£

α´úÂëÈçÏÂͼËùʾ£¨Í¼È¡×ÔͼÏñ¾Ö²¿²»±äÌØÐÔÌØÕ÷ÓëÃèÊöÒ»Ê飩£º

»¹ÊÇÒÔÉÏÃæµÄ²éѯ£¨2,4.5£©ÎªÀý£¬ËÑË÷µÄËã·¨Á÷³ÌΪ£º

1.½«£¨7,2£©Ñ¹ÈËÓÅÏȶÓÁÐÖУ»

2.ÌáÈ¡ÓÅÏȶÓÁÐÖеģ¨7,2£©£¬ÓÉÓÚ£¨2,4.5£©Î»ÓÚ£¨7,2£©·Ö¸î³¬Æ½ÃæµÄ×ó²à£¬ËùÒÔ¼ìË÷Æä×ó×Ó½áµã£¨5,4£©¡£Í¬Ê±£¬¸ù¾ÝBBF»úÖÆ¡±ËÑË÷×ó/ÓÒ×ÓÊ÷£¬¾Í°Ñ¶ÔÓ¦ÕâÒ»²ãµÄÐֵܽáµã¼´ÓÒ/×ó½áµã´æ½ø¶ÓÁС±£¬½«Æä£¨5,4£©¶ÔÓ¦µÄÐֵܽáµã¼´ÓÒ×Ó½áµã£¨9,6£©Ñ¹ÈËÓÅÏȶÓÁÐÖУ¬´ËʱÓÅÏȶÓÁÐΪ{£¨9,6£©}£¬×î¼ÑµãΪ£¨7,2£©£»È»ºóÒ»Ö±¼ìË÷µ½Ò¶×Ó½áµã£¨4,7£©£¬´ËʱÓÅÏȶÓÁÐΪ{£¨2,3£©£¬£¨9,6£©}£¬¡°×î¼Ñµã¡±ÔòΪ£¨5,4£©£»

3.ÌáÈ¡ÓÅÏȼ¶×î¸ßµÄ½áµã£¨2,3£©£¬Öظ´²½Öè2£¬Ö±µ½ÓÅÏȶÓÁÐΪ¿Õ¡£

ÈçÄãÔÚÏÂͼËù¼ûµ½µÄÄÇÑù£¨»°Ëµ£¬ÓÃÊó±êÔÚͼƬÉÏд×Ö×Åʵ²»ºÃд£©£º

   
6244 ´Îä¯ÀÀ       30
     
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹ØÊÓÆµ



ÎÒÃǸÃÈçºÎÉè¼ÆÊý¾Ý¿â
Êý¾Ý¿âÉè¼Æ¾­Ñé̸
Êý¾Ý¿âÉè¼Æ¹ý³Ì
Êý¾Ý¿â±à³Ì×ܽá
Êý¾Ý¿âÐÔÄܵ÷Óż¼ÇÉ
Êý¾Ý¿âÐÔÄܵ÷Õû
Êý¾Ý¿âÐÔÄÜÓÅ»¯½²×ù
Êý¾Ý¿âϵͳÐÔÄܵ÷ÓÅϵÁÐ
¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Ê¦
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò¼¼Êõ
HadoopÔ­Àí¡¢²¿ÊðÓëÐÔÄܵ÷ÓÅ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí