libsvm-284 源代码分析.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
libsvm-284 源代码分析

?libsvm-2.84 源代码分析(一)——cache类收藏 /*============================================= libsvm 2.84 代码分析 分析模块:cache类 分析者:Byron E-Mail: byronm@ 分析日期:2007年8月2日 ==============================================*/ // // Kernel Cache // // l is the number of total data items // size is the cache size limit in bytes // class Cache { public: ?Cache(int l,long int size); ?//构建Cache的参数,包含l(数据个数)和size(空间大小) ?????// l is the number of total data items ?????// size is the cache size limit in bytes ?~Cache();//析构函数 ?// request data [0,len) ?// return some position p where [p,len) need to be filled ?// (p = len if nothing needs to be filled) ?int get_data(const int index, Qfloat **data, int len);//读取数据 ?void swap_index(int i, int j);?// future_option private: ?int l; ?long int size; ?struct head_t?? ?{ ??head_t *prev, *next;?// a cicular list 双向链表 ??Qfloat *data; ??int len;??// data[0,len) is cached in this entry ?}; ?head_t *head;??? ?head_t lru_head; ?void lru_delete(head_t *h); ?void lru_insert(head_t *h); }; //cache保证索引结构的大小,余下的大小用来存放数据 //size最后被修改为可以存放Qfloat类型数据的大小 Cache::Cache(int l_,long int size_):l(l_),size(size_) { ?head = (head_t *)calloc(l,sizeof(head_t));?//initialized to 0,分配所有数据结构所需内存(地址连续) ?size /= sizeof(Qfloat);????//Qfloat 类型的个数,(size 的 意义已经由数据空间大小变为数据个数) ?size -= l * sizeof(head_t) / sizeof(Qfloat);?//除结构体所占用的空间外,剩下用于存放数据的个数 ?size = max(size, (long int) 2*l);??//cache must be large enough for two columns ?lru_head.next = lru_head.prev = lru_head; } Cache::~Cache()//释放内存数据区,然后释放结构 { ?for(head_t *h = lru_head.next; h != lru_head; h=h-next) ??free(h-data); ?free(head); } void Cache::lru_delete(head_t *h) { ?// delete from current location ?h-prev-next = h-next; ?h-next-prev = h-prev; } //循环链表插入 void Cache::lru_insert(head_t *h) { ?// insert to last position ?h-next = lru_head; ?h-prev = lru_head.prev; ?h-prev-next = h; ?h-next-prev = h; } // request data [0,len) // return some position p where [p,len) need to be filled // (p = len if nothing needs to be filled)?//返回cache的

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档