??xml version="1.0" encoding="utf-8" standalone="yes"?>精品熟女少妇AV免费久久,国产综合久久久久久鬼色,久久精品国产亚洲av高清漫画 http://www.shnenglu.com/humanchao/category/20271.html知识改变命运Q学习成未来?/description>zh-cn Tue, 26 Jun 2018 13:21:45 GMT Tue, 26 Jun 2018 13:21:45 GMT 60 LeetCode ?Median of Two Sorted Arrays - findMedianSortedArrays http://www.shnenglu.com/humanchao/archive/2018/06/26/215747.html胡满?/dc:creator>胡满?/author>Tue, 26 Jun 2018 05:57:00 GMT http://www.shnenglu.com/humanchao/archive/2018/06/26/215747.html http://www.shnenglu.com/humanchao/comments/215747.html http://www.shnenglu.com/humanchao/archive/2018/06/26/215747.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/215747.html http://www.shnenglu.com/humanchao/services/trackbacks/215747.html There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).The following code is better than most of the results returned by baidu or google. Time
complexity is O((m+n)/2), Space complexity is O(1). 1 double findMedianSortedArrays(vector<int >& nums1, vector<int >& nums2) 2 { 3 int nums1_i = 0, nums2_i = 0; 4 int mid1 = 0, mid2 = 0, count = 0; 5 while (nums1_i < nums1.size() && nums2_i < nums2.size()) 6 { 7 if (count++ > ((nums1.size() + nums2.size()) / 2)) break ; 8 mid1 = mid2; 9 mid2 = (nums1[nums1_i] < nums2[nums2_i] ? nums1[nums1_i++] : nums2[nums2_i++]);10 } 11 12 while (nums1_i < nums1.size()) 13 { 14 if (count++ > ((nums1.size() + nums2.size()) / 2)) break ;15 mid1 = mid2;16 mid2 = nums1[nums1_i++];17 } 18 19 while (nums2_i < nums2.size()) 20 { 21 if (count++ > ((nums1.size() + nums2.size()) / 2)) break ;22 mid1 = mid2;23 mid2 = nums2[nums2_i++];24 } 25 26 return (nums1.size() + nums2.size()) % 2 == 0 27 ? (mid1 + mid2) / 2.028 : mid2; 29 }
]]> 深入出LSH http://www.shnenglu.com/humanchao/archive/2018/02/24/215521.html胡满?/dc:creator>胡满?/author>Sat, 24 Feb 2018 05:10:00 GMT http://www.shnenglu.com/humanchao/archive/2018/02/24/215521.html http://www.shnenglu.com/humanchao/comments/215521.html http://www.shnenglu.com/humanchao/archive/2018/02/24/215521.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/215521.html http://www.shnenglu.com/humanchao/services/trackbacks/215521.html 阅读全文 ]]> LSH Locality-Sensitive Hashing 局部敏感哈希算法ȝ http://www.shnenglu.com/humanchao/archive/2017/05/24/214952.html胡满?/dc:creator>胡满?/author>Wed, 24 May 2017 01:16:00 GMT http://www.shnenglu.com/humanchao/archive/2017/05/24/214952.html http://www.shnenglu.com/humanchao/comments/214952.html http://www.shnenglu.com/humanchao/archive/2017/05/24/214952.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/214952.html http://www.shnenglu.com/humanchao/services/trackbacks/214952.html 脑图源文件下载地址http://www.shnenglu.com/Files/humanchao/LSH(Locality%20Sensitive%20Hashing).zip 参考文献:Website:
[1] http://people.csail.mit.edu/indyk/ QLSH原作者)
[2] http://www.mit.edu/~andoni/LSH/ (E2LSH)
Paper:
[1] Approximate nearest neighbor: towards removing the curse of dimensionality
[2] Similarity search in high dimensions via hashing
[3] Locality-sensitive hashing scheme based on p-stable distributions
[4] MultiProbe LSH Efficient Indexing for HighDimensional Similarity Search
[5] Near-Optimal Hashing Algorithms for Approximate Nearest Neighbor in High Dimensions
Tutorial:
[1] Locality-Sensitive Hashing for Finding Nearest Neighbors
[2] Approximate Proximity Problems in High Dimensions via Locality-Sensitive Hashing
[3] Similarity Search in High Dimensions
Book:
[1] Mining of Massive Datasets [2] Nearest Neighbor Methods in Learning and Vision: Theory and Practice
Cdoe:
[1] http://sourceforge.net/projects/lshkit/?source=directory [2] http://tarsos.0110.be/releases/TarsosLSH/TarsosLSH-0.5/TarsosLSH-0.5-Readme.html
[3] http://www.cse.ohio-state.edu/~kulis/klsh/klsh.htm
[4] http://code.google.com/p/likelike/
[5] https://github.com/yahoo/Optimal-LSH
[6] OpenCV LSHQ分别位于legacy module和flann module中)
]]> 转:l典的String Hash法 http://www.shnenglu.com/humanchao/archive/2012/12/26/196690.html胡满?/dc:creator>胡满?/author>Wed, 26 Dec 2012 09:08:00 GMT http://www.shnenglu.com/humanchao/archive/2012/12/26/196690.html http://www.shnenglu.com/humanchao/comments/196690.html http://www.shnenglu.com/humanchao/archive/2012/12/26/196690.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/196690.html http://www.shnenglu.com/humanchao/services/trackbacks/196690.html 设计高效法往往需要用Hash表,O(1)U的查找速度是Q何别的算法无法比拟的?/span>所谓HashQ一般是一个整敎ͼ通过某种法Q可以把一个字W串"pack"成一个整敎ͼq个数称为HashQ当Ӟ一个整数是无法对应一个字W串的?/span>所以Hash函数是Hash表最核心的部分,对于一个Hash函数Q评价其优劣的标准应为随机性或L性,卛_L一l标本,q入Hash表每一个单元(cellQ之概率的^均程度,因ؓq个概率^均,两个字符串计出的Hash值相{hash collision的可能越,数据在表中的分布pq_Q表的空间利用率p高?/span>Hash表的构造和冲突的不同实现方法对执行效率也有一定的影响. DJBHash是一U非常流行的法Q俗U?Times33"法。Times33的算法很单,是不断的乘33Q原型如?/span>hash(i) = hash(i-1) * 33 + str[i] Time33在效率和随机性两斚w上俱佟?/span>其它常用字符串哈希函数有Q?/span>BKDRHashQAPHashQJSHashQRSHashQSDBMHashQPJWHashQELFHash{。BKDRHash和APHash也是比较优秀的算法。当然要Ҏ具体应用选择合适的Hash法Q比如字W集的考虑?/span>APHash作者Arash Partow有一个页面很有参考h|包括了各UHash的介l及代码?/span>http://www.partow.net/programming/hashfunctions/#RSHashFunction Blizzard使用的算法比较精妙,被称?One-Way Hash"Qƈ且在Hash表中使用了三个哈希?一个用来确定位|,另外两个用来校验)?/span>MD5{加密算法也属于hashQ不q已被中国学者找到碰撞检的破解法 ]]> 转:循环有序数组查找问题 http://www.shnenglu.com/humanchao/archive/2012/12/26/196686.html胡满?/dc:creator>胡满?/author>Wed, 26 Dec 2012 08:15:00 GMT http://www.shnenglu.com/humanchao/archive/2012/12/26/196686.html http://www.shnenglu.com/humanchao/comments/196686.html http://www.shnenglu.com/humanchao/archive/2012/12/26/196686.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/196686.html http://www.shnenglu.com/humanchao/services/trackbacks/196686.html http://blog.sina.com.cn/s/blog_a2498b5b01014bsg.html题目描述Q?/strong>
一个@环有序数l(如:3,4,5,6,7,8,9,0,1,2Q,不知道其最值的位置Q要查找M数值的位置。要求算法时间复杂度为log2(n)?/span>
问题分析Q?/strong>
我们可以把@环有序数l分为左右两部分Q以mid = Qlow+highQ? 2为界Q,由@环有序数l的特点知,左右两部分必有一部分是有序的Q我们可以找出有序的q部分,然后看所查找元素是否在有序部分,若在Q则直接Ҏ序部分二分查找,若不在,Ҏ序部分递归调用查找函数?/span>
代码如下Q?/strong>
#include <iostream>
using namespace std;
int binarySearch(int a[],int low,int high,int value) //二分查找 { if(low>high) return -1;
int mid=(low+high)/2;
if(value==a[mid]) return mid; else if(value>a[mid]) return binarySearch(a,mid+1,high,value); else return binarySearch(a,low,mid-1,value); }
int Search(int a[],int low,int high,int value) //循环有序查找函数 { int mid=(low+high)/2;
if(a[mid]>a[low]) //左有?br /> { if(a[low]<=value && value<=a[mid] ) //说明value在左边,直接二分查找 { return binarySearch(a,low,mid,value); }
else //value在右?br /> { return Search(a,mid+1,high,value); } } else //x?br /> { if(a[mid]<=value && value<=a[high]) { return binarySearch(a,mid,high,value); } else { return Search(a,low,mid-1,value); } } }
int main() { int a[]={3,4,5,6,7,8,9,0,1,2};
cout<<Search(a,0,9,0)<<endl;
return 0; }
]]> 转:大小端问?/title> http://www.shnenglu.com/humanchao/archive/2012/12/26/196684.html胡满?/dc:creator>胡满?/author>Wed, 26 Dec 2012 08:06:00 GMT http://www.shnenglu.com/humanchao/archive/2012/12/26/196684.html http://www.shnenglu.com/humanchao/comments/196684.html http://www.shnenglu.com/humanchao/archive/2012/12/26/196684.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/196684.html http://www.shnenglu.com/humanchao/services/trackbacks/196684.html
大小端问?/span>
By unanao
<sunjianjiao@gmail.com>
一、什么是大小端问?/span>
(From ?/span>Computer Systems,A Programer's Perspective ?/span>) 在几乎所有的机器上,多字节对象被存储l的字节序列Q对象的地址为所使用字节序列中最低字节地址?/span>
端Q某些机器选择在存储器中按照从最低有效字节到最高有效字节的序存储对象Q这U最低有效字节在最前面的表C方式被UCؓ 端?/span> (little endian) ?/span>q样的存储模式有点儿cM于把数据当作字符串顺序处理:地址由小向大增加Q而数据从高位往低位放;
大端Q某些机器则按照从最高有效字节到最低有效字节的序储存Q这U最高有效字节在最前面的方式被UCؓ 大端?/span> (big endian) ?/span>q种存储模式地址的高低和数据位权有效地结合v来,高地址部分权值高Q低地址部分权gQ和我们的逻辑Ҏ一致?/span>
举个例子来说名大端 : 比如一?/span>int x, 地址?/span>0x100, 它的gؓ 0x1234567. 则它所占据?/span>0x100, 0x101, 0x102, 0x103 地址l织如下?/span>:
二、ؓ什么会有大端模式之分呢?
q是因ؓ在计机pȝ中,我们是以字节为单位的Q每个地址单元都对应着一个字节,一个字节ؓ 8bit 。但是在 C 语言中除?/span>8bit ?/span>char 之外Q还?/span>16bit ?/span>short 型, 32bit ?/span>long 型(要看具体的编译器Q,另外Q对于位数大?/span> 8 位的处理器,例如 16 位或?/span>32 位的处理器,׃寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就D了大端存储模式和端存储模式。例如一?/span>16bit ?/span>short ?/span>x Q在内存中的地址?/span>0x0010 Q?/span>x 的gؓ 0x1122 Q那?/span>0x11 为高字节Q?/span>0x22 Z字节。对?/span> 大端模式Q就?/span>0x11 攑֜低地址中,?/span>0x0010 中, 0x22 攑֜高地址中,?/span>0x0011 中。小端模式,刚好相反。我们常用的 X86 l构是小端模 式,?/span>KEIL C51 则ؓ大端模式。很多的 ARM Q?/span>DSP 都ؓ端模式。有?/span>ARM 处理器还可以q件来选择是大端模式还是小端模式?/span>
三、如何区分大端问题Q?/span>
Ҏ 1 Q?/span>
#include <stdio.h>
int main(void)
{
int i = 1;
unsigned char *pointer;
pointer = (unsigned char *)&i;
if(*pointer)
{
printf("litttle_endian");
}
else
{
printf("big endian\n");
}
return 0;
}
C 中的数据cd都是从内存的低地址向高地址扩展Q取址q算 "&" 都是取低地址 。小端方式中Q?/span>i 占至两个字节的长度Q则 i 所分配的内存最地址那个字节中就存着 1 Q其他字节是 0 ?/span>大端的话?/span>1 ?/span>i 的最高地址字节处存放, char 是一个字节,所以强制将 char 型量 p 指向 i Q?/span>?/span>p 指向的一定是 i 的最低地址Q那么就可以判断 p 中的值是不是 1 来确定是不是端?/span>
Ҏ 2 Q?/span>
#include <stdio.h>
int main(void)
{
union {
short a;
char ch;
} u;
u.a = 1;
if (u.ch == 1)
{
printf("Littel endian\n");
}
else
{
printf("Big endian\n");
}
}
利用联合体的特点Q数据成员共享内存空_ union 中元素的起始地址都是相同?/span>—— 位于联合的开始?/span> ?/span>char 来截取感兴趣的字?span style="color:#2B2BD5">?/span>
四、需要考虑大小端(字节序Q的情况
1 、所写的E序需要向不同的硬件^台迁U,说不定哪一个^台是大端q是端Qؓ了保证可UL性,一定提前考虑好?/span>
2. 在不同类型的机器之间通过|络传送二q制数据时?/span> 一个常见的问题是当端法机器生的数据被发送到大端法机器或者反之时Q接受程序会发现Q字 (word) 里的字节 (byte) 成了反序的。ؓ了避免这c问 题,|络应用E序的代码编写必遵守已建立的关于字节顺序的规则Q以保发送方机器它的内部表C{换成|络标准Q而接受方机器则将|络标准转换为它的内部标准?/span>
3. 当阅读表C整数的字节序列时。这通常发生在检查机器E序Ӟ e.g. Q反汇编得到的一条指令: 80483bd: 01 05 64 94 04 08 add %eax, 0x8049464
3. 当编写强转的cdpȝ的程序时?/span>如写入的数据?/span>u32 型,但是d的时候却?/span>char 型的。如Q?/span>0x1234, 大端d?/span>12 Ӟ端独到的是 34 ?/span>
六、提高程序的可移植?/span>
使用宏编?/span>
#ifdef LITTLE_ENDIAN
// 端的代?/span>
#else
// 大端的代?/span>
#endif
七、大、小端之间的转换
1 、小端{换ؓ大端
#include <stdio.h>
void show_byte(char *addr, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%.2x \t", addr[i]);
}
printf("\n");
}
int endian_convert(int t)
{
int result;
int i;
result = 0;
for (i = 0; i < sizeof(t); i++)
{
result <<= 8;
result |= (t & 0xFF);
t >>= 8;
}
return result;
}
int main(void)
{
int i;
int ret;
i = 0x1234567;
show_byte((char *)&i, sizeof(int));
ret = endian_convert(i);
show_byte((char *)&ret, sizeof(int));
return 0;
}
]]>转:模拟z牌(扑克)E序 http://www.shnenglu.com/humanchao/archive/2012/12/26/196683.html胡满?/dc:creator>胡满?/author>Wed, 26 Dec 2012 07:59:00 GMT http://www.shnenglu.com/humanchao/archive/2012/12/26/196683.html http://www.shnenglu.com/humanchao/comments/196683.html http://www.shnenglu.com/humanchao/archive/2012/12/26/196683.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/196683.html http://www.shnenglu.com/humanchao/services/trackbacks/196683.html 转自Q?a >http://www.fredosaurus.com/notes-cpp/misc/random-shuffle.html // File : misc/random/deal.cpp - Randomly shuffle deck of cards. // Illustrates : Shuffle algorithm, srand, rand.
// Improvements: Use classes for Card and Deck.
// Author : Fred Swartz 2003-08-24, shuffle correction 2007-01-18
// Placed in the public domain.
#include <iostream>
#include <cstdlib> // for srand and rand
#include <ctime> // for time
using namespace std;
int main() {
int card[52]; // array of cards;
int n; // number of cards to deal
srand(time(0)); // initialize seed "randomly"
for (int i=0; i<52; i++) {
card[i] = i; // fill the array in order
}
while (cin >> n) {
//--- Shuffle elements by randomly exchanging each with one other.
for (int i=0; i<(52-1); i++) {
int r = i + (rand() % (52-i)); // Random remaining position.
int temp = card[i]; card[i] = card[r]; card[r] = temp;
}
//--- Print first n cards as ints.
for (int c=0; c<n; c++) {
cout << card[c] << " "; // Just print number
}
cout << endl;
}
return 0;
}
]]> 转:h距离 http://www.shnenglu.com/humanchao/archive/2012/12/26/196680.html胡满?/dc:creator>胡满?/author>Wed, 26 Dec 2012 07:49:00 GMT http://www.shnenglu.com/humanchao/archive/2012/12/26/196680.html http://www.shnenglu.com/humanchao/comments/196680.html http://www.shnenglu.com/humanchao/archive/2012/12/26/196680.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/196680.html http://www.shnenglu.com/humanchao/services/trackbacks/196680.html 转自Q?a >http://blog.csdn.net/fuyangchang/article/details/5637464 wiki地址http://en.wikipedia.org/wiki/Hamming_distance 在信息领域,两个长度相等的字W串 的v明距L在相同位|上不同的字W的个数Q也是一个字W串替换成另一个字W串需要的替换的次数?/p>
例如Q?/p>
"toned " and "roses " is 3. 1011101 and 1001001 is 2.2173896 and 2233796 is 3.对于二进制来_h距离的结果相当于 a XOR b l果?的个数?/p>
python代码如下
def hamming_distance(s1, s2):
assert len(s1) == len(s2)
return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
print (hamming_distance("gdad","glas"))
l果?/span>2
C语言代码如下
unsigned hamdist(unsigned x, unsigned y)
{
unsigned dist = 0, val = x ^ y;
// Count the number of set bits
while(val)
{
++dist;
val &= val - 1;
}
return dist;
}
int main()
{
unsigned x="abcdcc";
unsigned y="abccdd";
unsigned z=hamdist(x,y);
printf("%d",z);
}
]]> 转:MySQL索引背后的数据结构及法原理 http://www.shnenglu.com/humanchao/archive/2012/12/21/196493.html胡满?/dc:creator>胡满?/author>Fri, 21 Dec 2012 02:38:00 GMT http://www.shnenglu.com/humanchao/archive/2012/12/21/196493.html http://www.shnenglu.com/humanchao/comments/196493.html http://www.shnenglu.com/humanchao/archive/2012/12/21/196493.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/196493.html http://www.shnenglu.com/humanchao/services/trackbacks/196493.html 阅读全文 ]]> ? 数学之美W记 http://www.shnenglu.com/humanchao/archive/2012/09/18/191111.html胡满?/dc:creator>胡满?/author>Tue, 18 Sep 2012 07:04:00 GMT http://www.shnenglu.com/humanchao/archive/2012/09/18/191111.html http://www.shnenglu.com/humanchao/comments/191111.html http://www.shnenglu.com/humanchao/archive/2012/09/18/191111.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/191111.html http://www.shnenglu.com/humanchao/services/trackbacks/191111.html 转自Q?/span>http://book.douban.com/annotation/19461092/
半个月前在豆瓣上看到了一本新书《数学之》,评h很高。而因为在半年前看了《什么是数学》就Ҏ学生浓厚兴,但苦于水q不的我便立马C一本,希望能对数学多一些了解,q认真阅读v来?/span>
令我意外q欣喜的是,q本书里边的数学内容q不晦ӆ难懂Q而且作者ؓ了讲q数学之而搭配的一些工E实例都是和我学习ƈ感兴的模式识别Q目标分cȝ关算法相兌的。这让我觉得捡到了意外的宝藏?/span>
书中每一个章节都或多或少是作者亲w经历过的,比如世界U教授的故事,或者Google的搜索引擎原理,又或者是Google的云计算{。作者用其行云流水般的语a各个知识点像讲故事一h的叙述出来?/span>
q本书着实让我印象深刻,所以我把笔记分享出来,希望更多和我学习研究领域一LZ喜欢q亲自阅读这本书Qƈ能支持作者。毕竟国内这U书实在是太了Q也希望能有更多领域内的大牛能再写出一些这U书c来让我们共同提高?/span>
1. 因ؓ需要传播信息量的增加,不同的声韛_ƈ不能完全表达信息Q语a便生了?/span>
2. 当文字增加到没有完全C所有文字时Q聚cd归类开始了。例如日代表太阳或者代表一天?/span>
3. 聚类会带来歧义性,但上下文可以消除歧义。信息冗余是信息安全的保障。例如罗塞塔石碑上同一信息重复三次?/span>
4. 最短编码原理即常用信息短编码,生僻信息长编码?/span>
5. 因ؓ文字只是信息的蝲体而非信息本nQ所以翻译是可以实现的?/span>
6. 2012Q其实是玛雅文明采用二十q制Q即四百q是一个太阳纪Q?012q恰巧是当前太阳U的最后一q_2013q是新的太阳U的开始,故被误传Z界末日?/span>
7. 字母可以看ؓ是一l编码,而汉字可以看Zl编码?/span>
8. Zl计的自然语a处理ҎQ在数学模型上和通信是相通的Q甚x相同的?/span>
9. 让计机处理自然语言的基本问题就是ؓ自然语言q种上下文相关的Ҏ徏立数学模型,即统计语a模型QStatistical Language ModalQ?/span>
10. Ҏ大数定理QLaw of Large NumbersQ,只要l计量够,相对频度q于概率?/span>
11. 二元模型。对于p(w1,w2,…,wn)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)的展开问题Q因为p(w3|w1,w2)难计,p(wn|w1,w2,…,wn-1)更难计算Q马科夫给Z一个偷懒但是颇为有效的ҎQ也是每当遇到q种情况Ӟ假设Q意wi出现的概率只与它前面的wi-1有关Q即p(s)=p(w1)p(w2|w1)p(w3|w2)…p(wi|wi-1)…p(wn|wn-1)。现在这个概率就变的单了。对应的语言模型?元模型(Bigram ModelQ?/span>
12. *N元模型。wi只与前一个wi-1有关q似的过头了Q所以N-1阉科夫假设ؓp(wi|w1,w2,…,wi-1)=p(wi|wi-N+1,wi-N+2,…,wi-1)Q对应的语言模型成ؓN元模型(N-Gram ModelQ。一元模型就是上下文无关模型Q实际应用中更多实用的是三元模型。Google的罗塞塔译pȝ和语a搜烦pȝ实用的是四元模型Q存储于500C上的Google服务器中?/span>
13. *卡兹退避法QKatz backoffQ,对于频率过一定阈值的词,它们的概率估计就是它们在语料库中的相寚w度,对于频率于q个阈值的词,它们的概率估计就于他们的相寚w度,出现ơ数少Q频率下调越多。对于未看见的词Q也l予一个比较小的概率(即下调得到的频率dQ,q样所有词的概率估计都qx了。这是卡兹退避法QKatz backoffQ?/span>
14. 训练数据通常是越多越好,通过qxq渡的方法可以解决零概率和很概率的问题Q毕竟在数据量多的时候概率模型的参数可以估计的比较准?/span>
15. 利用l计语言模型q行分词Q即最好的分词Ҏ应该保证分完词后q个句子出现的概率最大。根据不同应用,汉语分词的颗_度大小应该不同?/span>
16. W合马尔U夫假设Q各个状态st的概率分布只与它前一个状态st-1有关Q的随即q程x为马科夫过E,也称为马科夫链?/span>
17. 隐含马尔U夫模型是马科夫链的扩展,L时刻t的状态st是不可见的,所以观察者没法通过观察C个状态序列s1,s2,s3,…,sT来推{UL率等参数。但是隐马尔U夫模型在每个时刻t会输Z个符号otQ而且ot和st相关且仅和ot相关。这个被UCؓ独立输出假设。其中隐含的状态s1,s2,s3,…是一个典型的马尔U夫链?/span>
18. 隐含马尔U夫模型是机器学习主要工具之一Q和几乎所有机器学习的模型工具一P它需要一个训l算法(鲍姆-韦尔奇算法)和用时的解码算法(l特比算法)。掌握了q两cȝ法,基本上可以使用隐含马尔U夫模型q个工具了?/span>
19. 鲍姆-韦尔奇算法(Baum-Welch AlgorithmQ,首先扑ֈ一l能够生输出序列O的模型参敎ͼq个初始模型成ؓMtheta0Q需要在此基上找C个更好的模型Q假定不但可以算个模型生O的概率P(O|Mtheta0)Q而且能够扑ֈq个模型产生O的所有可能的路径以及q些路径的概率。ƈ出一l新的模型参数theta1Q从Mtheta0到Mtheta1的过E称ZơP代。接下来从Mtheta1出发L更好的模型Mtheta2Qƈ一直找下去Q直到模型的质量没有明显提高为止。这样一直估计(ExpectationQ新的模型参敎ͼ使得输出的概率达到最大化QMaximizationQ的q程被称为期望值最大化QExpectation-MaximizationQ简UEMq程。EMq程能保证一定能收敛C个局部最优点Q但不能保证扑ֈ全局最优点。因此,在一些自然语a处理的应用中Q这U无监督的鲍?韦尔奇算法训l处的模型比有监督的训练得到的模型效果略差?/span>
20. 熵,信息늚定义为H(X)=-SumP(x)logP(x)Q变量的不确定性越大,熵也大?/span>
21. 一个事物内部会存在随机性,也就是不定性,假定为UQ而从外部消除q个不确定性唯一的办法是引入信息IQ而需要引入的信息量取决于q个不确定性的大小Q即I>U才行。当I<UӞq些信息可以消除一部分不确定性,U'=U-I。反之,如果没有信息QQ何公C或者数字的游戏都无法排除不定性?/span>
22. 信息的作用在于消除不定性?/span>
23. 互信息,对两个随Z件相x的量化度量Q即随机事gX的不定性或者说熵H(X)Q在知道随机事gY条g下的不确定性,或者说条g熵H(X|Y)之间的差异,即I(X;Y)=H(X)-H(X|Y)。所谓两个事件相x的量化度量Q即在了解了其中一个Y的前提下Q对消除另一个X不确定性所提供的信息量?/span>
24. 相对熵(Kullback-Leibler DivergenceQ也叫交叉熵Q对两个完全相同的函敎ͼ他们的相对熵为零Q相对熵大Q两个函数差异越大,反之Q相对熵小Q两个函数差异越;对于概率分布或者概率密度函敎ͼ如果取值均大于Ӟ相对熵可以度量两个随机分布的差异性?/span>
25. 弗里德里?#183;N克QFrederek JelinekQ是自然语言处理真谛的先p?/span>
26. 技术分为术和道两种Q具体的做事Ҏ是术Q做事的原理和原则是道。术会从独门l技到普及再到落伍,q求术的Z很辛苦,只有掌握了道的本质和_N才能永远游刃有余?/span>
27. 真理在Ş式上从来是简单的Q而不是复杂和含的?/span>
28. 搜烦引擎不过是一张大表,表的每一行对应一个关键字Q而每一个关键字后面跟着一l数字,是包含该关键词的文献序号。但当烦引变的非常大的时候,q些索引需要通过分布式的方式存储C同的服务器上?/span>
29. |络爬虫QWeb CrawlersQ,图论的遍历算法和搜烦引擎的关pR互联网虽然复杂Q但是说I了其实是一张大?#8230;…可以把每一个网当做一个节点,把那些超链接当做q接|页的弧。有了超链接Q可以从M一个网出发,用图的遍历算法,自动讉K到每一个网ƈ且把他们存储h。完成这个功能的E序叫网l爬虫?/span>
30. 哥尼斯堡七桥Q如果一个图能从一个顶点出发,每条边不重复的遍历一遍回到这个顶点,那么每一个顶点的度必Mؓ偶数?/span>
31. 构徏|络爬虫的工E要点:1.用BFSQ广度优先搜索)q是DFSQ深度优先搜索)Q一般是先下载完一个网站,再进入下一个网站,即BFS的成分多一些?.面的分析和URL的提取,如果有些|页明明存在Q但搜烦引擎q没有收录,可能的原因之一是网l爬虫中的解析程序没能成功解析网中不规范的脚本E序?.记录哪些|页已经下蝲q的URL表,可以用哈希表。最l,好的Ҏ一般都采用了这样两个技术:首先明确每台下蝲服务器的分工Q也是在调度时Q一看到某个URLq道要交给哪台服务器去下蝲Q这样就避免了很多服务器对同一个URL做出是否需要下载的判断。然后,在明分工的基础上,判断URL是否下蝲可以批处理了,比如每次向哈希表Q一l独立的服务器)发送一大批询问Q或者每ơ更C大批哈希表的内容Q这样通信的次数就大大减少了?/span>
32. PageRank衡量|页质量的核心思想Q在互联|上Q如果一个网被很多其他|页所链接Q说明它受到普遍的承认和信赖Q那么它的排名就高。同Ӟ对于来自不同|页的链接区别对待,因ؓ|页排名高的那些|页的链接更可靠Q于是要l这些链接比较大的权重?/span>
33. TF-IDF(Term Frequency / Inverse Document Frequency) Q关键词频率-逆文本频率|其中QTF为某个网上出现关键词的频率QIDF为假定一个关键词w在Dw个网中出现q,那么Dw大Qw的权重越,反之亦然Q公式ؓlog(D/Dw)?.一个词预测主题的能力越强,权重大Q反之,权重小?.停止词的权重为零?/span>
34. 动态规划(Dynamic ProgrammingQ的原理Q将一个寻扑օE最优的问题分解成一个个L局部最优的问题?/span>
35. 一个好的算法应该像L器中最有名的AK-47冲锋枪那P单、有效、可靠性好而且ҎLQ易操作Q而不应该故弄玄虚。选择单方案可以容易解释每个步骤和Ҏ背后的道理,q样不仅便于出问题时的查错,也容易找C后改q的目标?/span>
36. 在实际的分类中,可以先进行奇异值分解(得到分类l果略显_糙但能较快得到l果Q,在粗分类l果的基上,利用计算向量余u的方法(对范围内的分cd两两计算Q,在粗分类l果的基上,q行几次q代Q得到比较精的l果?/span>
37. 奇异值分解(Singular Value DecompositionQ,在需要用一个大矩阵A来描q成千上万文章和几十上百万词的关联性时Q计量非常大,可以A奇异值分解ؓX、B和Y三个矩阵QAmn=Xmm*Bmn*YnnQX表示词和词类的相x,Y表示文本和主题的相关性,B表示词类和主题的相关性,其中B对角U上的元素很多值相对其他的非常,或者ؓӞ可以省略。对兌矩阵Aq行一ơ奇异值分解,可以同时完成近义词分类和文章的分类Q同时能得到每个主题和每个词义类之间的相x,q个l果非常漂亮?/span>
38. 信息指纹。如果能够找CU函敎ͼ?000亿网址随即地映到128位二q制Q也是16字节的整数空_qq?6字节的随机数做该|址的信息指UV信息指U可以理解ؓ一D信息映到一个多l二q制I间中的一个点Q只要这个随卛_数做的好Q那么不同信息对应的点不会重合,因此q个二进制的数字变成了原来信息所h的独一无二的指UV?/span>
39. 判断两个集合是否相同Q最W的Ҏ是这个集合中的元素一一比较Q复杂度O(squareN)Q稍好的是将元素排序后顺序比较,复杂度O(NlogN)Q最完美的方法是计算q两个集合的指纹Q然后直接进行比较,计算复杂度O(N)?/span>
40. 伪随机数产生器算法(Pseudo-Random Number GeneratorQPRNGQ,q是产生信息指纹的关键算法,通过他可以将L长的整数转换成特定长度的伪随机数。最早的PRNG是将一个数的^Ҏ头去֏中间Q当然这U方法不是很随即Q现在常用的是梅旋转算法(Mersenne TwisterQ?/span>
41. 在互联网上加密要使用Z加密的伪随机C生器QCryptography Secure Pseudo-Random Number GeneratorQCSPRNGQ,常用的算法有MD5或者SHA-1{标准,可以不定长的信息变成定长的128位或?60位二q制随机数?/span>
42. 最大熵模型QMaximum EntropyQ的原理是保留全部的不定性,风险降到最。最大熵原理指出Q需要对一个随Z件的概率分布q行预测Ӟ我们的预应当满_部已知的条gQ而对未知的情况不要做M主观假设。在q种情况下,概率分布最均匀Q预的风险最。I.Csiszar证明Q对M一l不自相矛盾的信息,q个最大熵模型不仅存在Q而且是唯一的,此外Q他们都有同一个非常简单的形式-指数函数?/span>
43. 通用q代法QGeneralized Iterative ScalingQGISQ是最原始的最大熵模型的训l方法?.假定W零ơP代的初始模型为等概率的均匀分布?.用第NơP代的模型来估每U信息特征在训练数据中的分布。如果超q了实际的,把相应的模型参数变,反之变大?.重复步骤2直至收敛。这是一U典型的期望值最大化QExpectation MaximizationQEMQ算法。IIS(Improved Iterative Scaling)比GIS~短了一C个数量?/span>
44. 布隆qo器实际上是一个很长的二进制向量和一pd随机映射的函数?/span>
45. 贝叶斯网l从数学的层面讲是一个加权的有向图,是马科夫链的扩展,而从知识论的层面看,贝叶斯网l克服了马尔U夫那种机械的线性的U束Q它可以把Q何有兌的事件统一到它的框架下面。在|络中,假定马尔U夫假设成立Q即每一个状态只与和它直接相q的状态有养I而和他间接相q的状态没有直接关p,那么它就是贝叶斯|络。在|络中每个节Ҏ率的计算Q都可以用贝叶斯公式来进行,贝叶斯网l也因此得名。由于网l的每个弧都有一个可信度Q贝叶斯|络也被UC信念|络QBelief NetworksQ?/span>
46. 条g随机场是计算联合概率分布的有效模型。在一个隐含马科夫模型中Q以x1,x2,...,xn表示观测值序列,以y1,y2,...,yn表示隐含的状态序列,那么xi只取决于产生它们的状态yi,和前后的状态yi-1和yi+1都无兟뀂显然很多应用里观察值xi可能和前后的状态都有关Q如果把xi和yi-1,yi,yi+1都考虑q来Q这L模型是条g随机场。它是一U特D的概率图模型(Probablistic Graph ModelQ,它的Ҏ性在于,变量之间要遵守马科夫假设,x个状态的转移概率只取决于盔R的状态,q一点和另一U概率图模型贝叶斯网l相同,它们的不同之处在于条仉机场是无向图Q而贝叶斯|络是有向图?/span>
47. l特比算法(Viterbi AlgoritmQ是一个特D但应用最q的动态规划算法,利用动态规划,可以解决M一个图中的最短\径问题。它之所以重要,是因为凡是用隐含马科夫模型描q的问题都可以用它来解码?.从点S出发Q对于第一个状态x1的各个节点,不妨假定有n1个,计算出SC们的距离d(S,x1i)Q其中x1i代表L状?的节炏V因为只有一步,所以这些距都是SC们各自的最短距R?.对于W二个状态x2的所有节点,要计出从SC们的最短距Rd(S,x2i)=min_I=1,n1_d(S,x1j)+d(x1j,x2i)Q由于j有n1U可能性,需要一一计算Q然后找到最倹{这样对于第二个状态的每个节点Q需要n1ơ乘法计。假定这个状态有n2个节点,把Sq些节点的距都一遍,有O(n1*n2)ơ运?.按照上述Ҏ从第二个状态走到第三个状态一直走到最后一个状态,q样得到整个网l从头到最短\径?/span>
48. 扩频传输QSpread-Spectrum TransmissionQ和固定频率的传输相比,有三Ҏ昄好处Q?.抗干扰能力强?.信号能量非常低,很难获取?.扩频传输利用带宽更充分?/span>
49. Google针对云计给出的解决工具是MapReduceQ其Ҏ原理是计算机算法上常见的分ȝ法(Divide-and-ConquerQ。将一个大d拆分成小的子dQƈ完成子Q务的计算Q这个过E叫MapQ将中间l果合ƈ成最l结果,q个q程叫Reduce?/span>
50. 逻辑回归模型QLogistic RegressionQ是一个事件出现的概率适应C条逻辑曲线QLogistic CurveQ上。典型的逻辑回归函数Qf(z)=e`z/e`z+1=1/1+e`-z。逻辑曲线是一条S型曲U,其特Ҏ开始变化快Q逐渐减慢Q最后饱和。逻辑自回归的好处是它的变量范围从负无I到正无IP而值域范围限制?-1之间。因为值域的范围在0-1之间Q这样逻辑回归函数可以和一个概率分别联pv来了。因变量范围在负无穷到正无穷之间Q它可以把信号l合hQ不论组合成多大或者多的|最后依然能得到一个概率分布?/span>
51. 期望最大化法QExpectation Maximization AlgorithmQ,Ҏ现有的模型,计算各个观测数据输入到模型中的计结果,q个q程UCؓ期望D过E(ExpectationQ,或Eq程Q接下来Q重新计模型参敎ͼ以最大化期望|q个q程UCؓ最大化的过E(MaximizationQ,或Mq程。这一cȝ法都UCؓEM法Q比如隐含马科夫模型的训练ҎBaum-Welch法Q以及最大熵模型的训l方法GIS法?/span> ]]> 收藏:汉字拼音 五笔 GB2312 GBK Unicode BIG5~码速查链接 http://www.shnenglu.com/humanchao/archive/2012/09/07/189801.html胡满?/dc:creator>胡满?/author>Fri, 07 Sep 2012 05:15:00 GMT http://www.shnenglu.com/humanchao/archive/2012/09/07/189801.html http://www.shnenglu.com/humanchao/comments/189801.html http://www.shnenglu.com/humanchao/archive/2012/09/07/189801.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/189801.html http://www.shnenglu.com/humanchao/services/trackbacks/189801.html http://ipseeker.cn/tools/pywb.php ]]> 重徏二叉?/title> http://www.shnenglu.com/humanchao/archive/2008/08/27/60174.html胡满?/dc:creator>胡满?/author>Wed, 27 Aug 2008 09:51:00 GMT http://www.shnenglu.com/humanchao/archive/2008/08/27/60174.html http://www.shnenglu.com/humanchao/comments/60174.html http://www.shnenglu.com/humanchao/archive/2008/08/27/60174.html#Feedback 0 http://www.shnenglu.com/humanchao/comments/commentRss/60174.html http://www.shnenglu.com/humanchao/services/trackbacks/60174.html 已知前序和中序:
struct NODE { NODE * pLeft; NODE * pRight; char chValue; }; int CharInStrFirstPos( char ch, char * str, int nLen) { char * pOrgStr = str; while (nLen > 0 && ch != * str) { str ++ ; nLen -- ; } return (nLen > 0 ) ? (str - pOrgStr) : - 1 ; } void ReBuild_PreIn( char * pPreOrder, char * pInOrder, int nTreeLen, NODE ** pRoot) { if (pPreOrder == NULL || pInOrder == NULL) { return ; } NODE * pTemp = new NODE; pTemp -> chValue = * pPreOrder; pTemp -> pLeft = NULL; pTemp -> pRight = NULL; if ( * pRoot == NULL) { * pRoot = pTemp; } if (nTreeLen == 1 ) { return ; } int nLeftLen = CharInStrFirstPos( * pPreOrder, pInOrder, nTreeLen); assert(nLeftLen != - 1 ); int nRightLen = nTreeLen - nLeftLen - 1 ; if (nLeftLen > 0 ) { ReBuild_PreIn(pPreOrder + 1 , pInOrder, nLeftLen, & (( * pRoot) -> pLeft)); } if (nRightLen > 0 ) { ReBuild_PreIn(pPreOrder + nLeftLen + 1 , pInOrder + nLeftLen + 1 , nRightLen, & (( * pRoot) -> pRight)); } }
已知后序和中序:
void ReBuild_AftIn( char * pAftOrder, char * pInOrder, int nTreeLen, NODE ** pRoot) { if (pAftOrder == NULL || pInOrder == NULL) { return ; } NODE * pTemp = new NODE; pTemp -> chValue = * pAftOrder; pTemp -> pLeft = NULL; pTemp -> pRight = NULL; if ( * pRoot == NULL) { * pRoot = pTemp; } if (nTreeLen == 1 ) { return ; } int nLeftLen = CharInStrFirstPos( * pAftOrder, pInOrder, nTreeLen); assert(nLeftLen != - 1 ); int nRightLen = nTreeLen - nLeftLen - 1 ; if (nLeftLen > 0 ) { ReBuild_AftIn(pAftOrder + nRightLen + 1 , pInOrder, nLeftLen, & (( * pRoot) -> pLeft)); } if (nRightLen > 0 ) { ReBuild_AftIn(pAftOrder + 1 , pInOrder + nLeftLen + 1 , nRightLen, & (( * pRoot) -> pRight)); } }
我上传了一个工VC的工E,有兴的朋友Ҏ下蝲 。代码参考于《编E之》?br /> ]]>
þþþùƷ |
þ66͵Ʒ9 |
ۺϾþþƷɫ |
ɫ8þ97㽶987 |
þþһ |
AVӰƬþþþþ |
þҹҹ³³ƬӰ |
Ļþ |
þþƷҹҹŷ |
91Ʒ91Ⱦþþþø |
˾þô߽鶹 |
ҹþþþüŮӰԺ |
99þùѸ |
þAVӰ |
þˬˬƬAV |
ٸ߳ҽоþþþþ |
˾Ʒһþþ |
þݺҹҹ96 |
ƷۺϾþ |
˾þþƷ鶹һ |
ŷ츾þþþþò |
ɫúݺݾþۺ |
þþþëƬ |
þþþŷղAV
|
ɫþþþþþС˵ |
97þùƷ |
㽶99þùۺϾƷլ |
ۺϾþһ |
99þҹɫƷվ |
þþþø߳ëƬȫ |
Ʒþþþȥq |
ձŷƷһҳþ |
ݺɫۺϾþȥ |
þ㽶߿ۿ99 |
þþƷAVȫ |
պһþ |
þþþŷղAV
|
99ƷۺϾþþþ |
˳þõӰվ |
þ99ۺϾƷҳ |
99þþƷѾƷ |