类型 | 内容 |
---|---|
标题 | Are the Popular Users Always Important forInformation Dissemination in Online Social Networks? |
时间 | 2014 |
会议 | MNET |
引用 | S. Wen, J. Jiang, Y. Xiang, S. Yu and W. Zhou, “Are the popular users always important for information dissemination in online social networks?,” in IEEE Network, vol. 28, no. 5, pp. 64-67, September-October 2014. |
DOI | 10.1109/MNET.2014.6915441 |
OSN-online social networks
受欢迎的用户在OSN中通常是高度连接的,直观地说,他们可以将恶意信息分发给更多的人,并更快地到达接收者. 在Facebook中模拟信息传播,研究高度连接的用户之间的传播速度、规模和可控性。
OSN中的热门用户对应的节点度较高,除此之外还有四个度量
Core - OSN拓扑可以使用k-shell分析进行分解。最里面的部分是网络的核心。一些研究人员发现,最有效的信息传播者是位于核心的节点。这个核心的用户能够最快地分发信息(图2c)。我们将检查受欢迎的用户是否是核心节点
Betweenness - Betweenness的概念通常定义为通过拓扑中任意节点的最短路径数 如图2b所示,具有较大Betweenness的节点在将不同的用户组连接在一起时,在信息传播规模中起着至关重要的作用。
Overlapped Community Bridges(重叠社区的桥梁) - 在现实世界中,每个OSN用户在不同的组中扮演各种角色。 例如用户是学生,则属于一个学生社区,同时该用户也可能属于一个家庭和各种爱好群体的社区。 因此,大多数实际的OSN由高度重叠的凝聚力社区组成。 位于多个社区中的网桥将信息从一个社区转发到另一个社区。 这些桥梁自然是人们用来预防社区内外恶意信息的节点。 如图2d。
Separated Community Bridges 研究人员通过将OSNs的拓扑结构划分成许多独立的社区来提取社会关系图。这些方法的前提是用户社交朋友那里接收和转发信息。与重叠社区相比,图2e所示,桥梁是指与其他社区连接的节点。
我们模拟谣言在真实的OSN上的传播。扩散的起源是从拓扑中随机选择的。结果是100次运行的平均值。
我们检查节点的平均传染时间以阻止谣言。 我们使用防御率(l)表示OSN拓扑中所选节点相对于所有节点的百分比。 结果如图3所示。很明显,由degree度量确定的节点将比core度量所捕获的节点晚受到影响。 结果表明,受欢迎的用户传播信息的效率比核心内部的用户低。
为了探究degree度量在信息传播速度方面表现不佳的原因,我们在图4a中检查了具有较大degree的节点的核心顺序。我们可以看到网络核心内的大量节点没有高度连接。对于信息传播的速度,分析表明,在OSNs中,受欢迎的用户在OSN中可能并不总是很重要。
我们还模拟谣言的传播来检验当一组受欢迎的用户阻止谣言时,信息传播的规模。结果如图5所示。当采用degree度量来确定群组成员时,最终相信谣言的用户数将小于Betweenness度量所确定的用户数。
我们计算了具有较大degree的节点的Betweenness值。如图4b所示,在OSN拓扑中,许多高度连接的节点没有高Betweenness值。
在现实世界中,OSN由一系列社区组成。 人们自然更可能与位于相同社区的用户建立联系。 为了控制进出社区的信息,连接不同社区的桥梁至关重要。 我们研究degree度量是否可以识别大多数的社区桥梁来进一步检查可控性。
分离的社区的结果如图4c。 类似于Betweenness度量,我们可以看到许多社区桥梁在OSN拓扑中的degree都很小。 此外,我们在图4d中显示了重叠社区的结果。很明显,degree度量识别重叠的社区桥梁的能力较弱。 对于可控性,分析结果进一步解释了以下观点:受欢迎的用户在OSN中可能并不总是很重要。
为了更清楚地比较这三种方法,我们检查了不同方法识别的节点之间的交叉点。结果如图6所示,degree度量可以捕获更多的分离社区的桥,其次是Core度量、betweenness度量和重叠社区桥。这些广泛的结果表明,与其他用户相比,受欢迎的用户更可能成为分离的社区桥梁。
本来pypi库里有一个名为translate的库,看文档介绍也非常的简单易用。
但是实际安装时却出现了不少的问题,conda里面找不到这个包,pip安装也失败(原因是我电脑中安装的依赖包,比它所需要的依赖包的版本要新)
最后一看,这个库上次的更新时间是2017年,而且只支持到Python 3.5,而我目前用的是Python 3.7,虽说Anaconda提供了虚拟环境的管理,但是我目前需要把翻译功能加到目前在做的一个项目中,为此修改环境太折腾。
于是决定直接调用现成的有道API来进行翻译,代码来自于https://segmentfault.com/a/1190000015643320
—
cPickle是用C语言实现的,pickle是用纯python语言实现的,相比,cPickle的读写效率高一些。
尝试导入
try:
import cPickle as pickle
except ImportError:
import pickle
保存变量
dir = {bird:0,pig:1,cat:2,dog:3}
f = open('animal.pkl','wb')
pickle.dump(dir,f)
f.close()
文档:https://joblib.readthedocs.io/en/latest/
相比于pickle更加高效
from joblib import *
Python中的变量存储到本地,例
dump(value,filename)
参数:
value = load(file_name)
缓存某一个函数的运行结果,再次调用此函数且参数相同时,不用重新计算
from joblib import Memory
cachedir = 'your_cache_dir_goes_here'
mem = Memory(cachedir)
import numpy as np
a = np.vander(np.arange(3)).astype(np.float)
square = mem.cache(np.square)
b = square(a)
### 再次运行命令时不会重新计算
c = square(a)
NDSS2018 https://www.ndss-symposium.org/ndss2018/programme/
NDSS2019 https://www.ndss-symposium.org/ndss-program/ndss-symposium-2019-program/
NDSS2020 https://www.ndss-symposium.org/ndss2020/accepted-papers/
IMC2018 https://conferences.sigcomm.org/imc/2018/program/
IMC2019 https://conferences.sigcomm.org/imc/2019/program/
IMC2020 https://conferences.sigcomm.org/imc/2020/accepted/
SP2018 https://www.ieee-security.org/TC/SP2018/program-papers.html
SP2019 https://www.ieee-security.org/TC/SP2019/program-papers.html
SP2020 https://www.ieee-security.org/TC/SP2020/program-papers.html
SP2021 https://www.ieee-security.org/TC/SP2021/program-papers.html
WWW2018 https://www2018.thewebconf.org/program/
WWW2019 https://www2019.thewebconf.org/accepted-papers
NSDI2018 https://www.usenix.org/conference/nsdi18/technical-sessions#wedam
NSDI2019 https://www.usenix.org/conference/nsdi19/technical-sessions#wedam
NSDI2020 https://www.usenix.org/conference/nsdi20/technical-sessions#wedam
CCS2018 https://www.sigsac.org/ccs/CCS2018/accepted/papers/
CCS2019 https://sigsac.org/ccs/CCS2019/index.php/program/accepted-papers/
Usenixsecurity2018 https://www.usenix.org/conference/usenixsecurity18/glance
Usenixsecurity2019 https://www.usenix.org/conference/usenixsecurity19/glance
Usenixsecurity2020
HPDC2018 https://dl.acm.org/doi/proceedings/10.1145/3208040
HPDC2019 http://www.hpdc.org/2019/program/
RAID 2019 https://www.usenix.org/conference/raid2019/proceedings
RAID 2020 https://www.usenix.org/conference/raid2020/proceedings
题目简介:
在n*m的区域内,k个地雷,若干个障碍物 在地雷的旁边就可以排雷,排完雷就会自动移到那个位置上 计算最少花费的时间(排完雷移动过去那一步不算时间)
输入
2
5 5 2
1 1
..##.
#..#.
.##..
.##..
#.##.
1 2
3 1
5 5 3
1 1
...#.
.#...
....#
..##.
...#.
3 3
4 1
2 4
输出
-1
9
代码
from queue import Queue
import sys
dir = [[0,1],[0,-1],[1,0],[-1,0]]
class Solution:
def start(self,mp,x,y,xi,yi):
Q = Queue()
steps = Queue()
Q.put([x,y])
steps.put(0)
for line in mp:
print(line)
print("from ({},{}) to ({},{})".format(x,y,xi,yi))
vis = [[ 0 for i in range(self.m+1) ] for j in range(self.n+1)]
print(len(vis),len(vis[0]))
while Q.empty() == False:
now = Q.get()
step = steps.get()
print('now {} {} {}'.format(now[0],now[1],step))
if now[0] == xi and now[1] == yi:
mp[now[0]][now[1]] == '.'
self.x = now[0]
self.y = now[1]
mp[xi][yi] = '.'
return step-1
for d in dir:
newx = now[0] + d[0]
newy = now[1] + d[1]
if newx <=0 or newy <= 0 or newx >self.n or newy >self.m:
continue
if newx == xi and newy == yi or mp[newx][newy] == '.':
if vis[newx][newy] == 1:
continue
# print("add {} {}".format(newx,newy))
vis[newx][newy] = 1
Q.put([newx,newy])
steps.put(step+1)
return -1
def run(self,n,m,k,mp,bomb_list):
cost = 0
for target in bomb_list:
res = self.start(mp,self.x,self.y,target[0],target[1])
print("step",res)
if res != -1:
cost += res
else:
print(-1)
return
print("cost:",cost)
def stdin(self):
self.n,self.m,k = list(map(int,input().split()))
self.x,self.y = list(map(int,input().split()))
mp = [['#'] * (self.m+1)]
for i in range(self.n):
line = list(input())
line.insert(0,'#')
mp.append(line)
bomb_list = []
for i in range(k):
xi,yi = list(map(int,input().split()))
bomb_list.append([xi,yi])
mp[xi][yi] = 'x'
self.run(self.n,self.m,k,mp,bomb_list)
with open(r"2.in", 'r') as file:
sys.stdin = file
s1 = Solution()
T = int(input())
while T>0:
s1.stdin()
T-=1
解题代码:Python3
解题日期:2020-3-8
地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
思考:本题目要求是股票仅买卖一次,但一开始读题想成了可以买卖多次,想了很久虽然有解法但是过于复杂。此题目难度不大,但是第一次尝试用Python做题,在很多数组的操作上非常不熟练。
我的代码
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if prices == []:
return 0
day_num = len(prices)
leftmin = [9999] * day_num # 左侧的最小值
rightmax = [0] * day_num # 右侧的最大值
leftmin[0] = prices[0]
rightmax[-1] = prices[-1]
for i in range(1,day_num):
leftmin[i] = min(leftmin[i-1],prices[i])
rightmax[day_num-i-1] = max(rightmax[day_num-i],prices[day_num-i-1])
max_price = 0
print(leftmin,'\n',rightmax)
for i in range(day_num):
max_price = max(max_price,rightmax[i]-leftmin[i])
return max_price
别人的代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
inf = int(1e9)
minprice = inf
maxprofit = 0
for price in prices:
maxprofit = max(price - minprice, maxprofit)
minprice = min(price, minprice)
return maxprofit
地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
解题日期:2020-3-23
思路:此题相比于上一题的改进是可以买卖多次
相比之下,上一题要简单很多,这个题的难度不高,但是需要想到点上。当价格开始出现下降时,意味着上一次的股票必须要卖出