现在有3到题目,麻烦大家给点意见
1.实现一个函数f(A,B),可以使用的运算有+12,-12,+7,-7,+5,-5 ,如何得到A-B的最短距离。
比如A=0和B=24,则0+12+12=24,这就是最短距离。2.比如百度一天的访问日志,日志只有一列,就是IP,现在要把重复的IP去除,如何做?
由于数据量比较大,我想到了几种方案:
a:用AWK,不知道AWK对这种大文件会不会报内存溢出的错误
b:把文件切割成若干个小文件,然后对每个文件进行过滤,最后在合并
c:用php的fseek函数,一段一段处理。
d:是否可以建一张哈希表,但是如何建, 用什么哈希函数不知道?(求大神解答,这一条很想知道)
不知道各位还有什么更高效的方法吗?对于大文件处理,经验比较少
3.就是做一个统计,如果百度首页添加一朵花,点击一下花,旁边的计数数字就加1,有什么实现方案?如何防刷?对于这个问题,我想实现不难,主要是如何防刷?我想到的是用IP在唯一标识,但是想到有些大公司的出口IP都是一个,这样的话,一个公司就只能投一次。还有比如联通的手机,内网IP也是一个。请问这个防刷的问题如何解决
1.实现一个函数f(A,B),可以使用的运算有+12,-12,+7,-7,+5,-5 ,如何得到A-B的最短距离。
比如A=0和B=24,则0+12+12=24,这就是最短距离。2.比如百度一天的访问日志,日志只有一列,就是IP,现在要把重复的IP去除,如何做?
由于数据量比较大,我想到了几种方案:
a:用AWK,不知道AWK对这种大文件会不会报内存溢出的错误
b:把文件切割成若干个小文件,然后对每个文件进行过滤,最后在合并
c:用php的fseek函数,一段一段处理。
d:是否可以建一张哈希表,但是如何建, 用什么哈希函数不知道?(求大神解答,这一条很想知道)
不知道各位还有什么更高效的方法吗?对于大文件处理,经验比较少
3.就是做一个统计,如果百度首页添加一朵花,点击一下花,旁边的计数数字就加1,有什么实现方案?如何防刷?对于这个问题,我想实现不难,主要是如何防刷?我想到的是用IP在唯一标识,但是想到有些大公司的出口IP都是一个,这样的话,一个公司就只能投一次。还有比如联通的手机,内网IP也是一个。请问这个防刷的问题如何解决
比如A=0和B=24,则0+12+12=24,这就是最短距离。
查表法function f($a, $b) {
$c = abs($b - $a);
$d = array(
0 => '',
1 => '+5+5+5-7-7',
2 => '+7-5',
3 => '+5+5-7',
4 => '+7+7-5-5',
);
$r = str_repeat('+12', intval($c/12));
$c %= 12;
$r .= str_repeat('+12', intval($c/7));
return $r . $d[$c % 5];
}
请问这个$d = array(
0 => '',
1 => '+5+5+5-7-7',
2 => '+7-5',
3 => '+5+5-7',
4 => '+7+7-5-5',
);是什么意思
哈希表 就用 ip 做键
php 提供有 ip2long 用于将 ip 转换成长整型数
mysql 也提供了 INET_ATON
$c = abs($b - $a);
$d = array(
0 => '',
1 => '+5+5+5-7-7',
2 => '+7-5',
3 => '+5+5-7',
4 => '+7+7-5-5',
);
$r = str_repeat('+12', intval($c/12));
$c %= 12;
$r .= str_repeat('+7', intval($c/7));
$c %= 7;
return $r . $d[$c % 5];
}我修补了下,这样的好像才是正确的