今天从 svn 中取下一个同事的代码,浏览了一下。其中一段是关于洗牌的。感觉实现的很乱,算法也没有选好。自己重新写了一个。
因为国庆的缘故,负责这块代码的同事提前回家了。我只好自己读代码实现。看完后,发现旧的实现是这样的:对于 N 张牌,每次随机抽出一张来,检查这张牌是否抽过。如果被抽取过,就重复抽取过程,直到不重复。然后记录下抽取的牌的位置。重复这个过程,直到得到一个随机序列。最后用这个序列将原始排列打乱。
这个方案给我的第一感觉并不好,因为当 N 较大时,最后需要重复抽取多次才可以成功。我估算了整个的时间复杂度大约是 O(N^2)
当然,洗牌这件事情可以有许多算法来解决。我重新写了一个,采用了最简单实现的方案。
新的方案是从牌套里随机找到两个位置,将其位置的牌交换。重复若干次后,便可以将牌洗乱。这里最关键的是需要找到一个合适的重复次数。
这个问题首先需要定义什么叫作“洗乱”。
我随便给出了一个定义:在洗牌过程中,任意一张牌不被抽到交换的概率小于 1/1000 。(这个定义不太符合直观感觉,这个下面会讨论)
简单的列出方程:( (n-2)/n ) ^ m <=1/1000 得到 m >= -3* ln 10 / ln (1-2/n)
对于 52 张牌,大约是 176 次。
之后,另一个同事给了我另一个方案。产生 N 个不易发生碰撞的随机数,比如 (0,1) 的浮点数,或是 [0,4G) 的整数。将这些数字排序,则可以得到一个被打乱次序的序列。
这个方案看起来更好,因为更接近洗乱牌的目的。我重新给一个“洗乱”的定义:每张牌在每个位置出现的概率相同。
反过来,我想知道前面我给出的交换法洗牌有多接近它。
要得到严格的数学分析似乎很困难。偷懒 google 了一下,原来好多人研究过类似问题了。看这里:
http://mathworld.wolfram.com/Shuffle.html
从这个链接找过去,有一篇论文 。它讨论了另一种类似的洗牌方法,即第一次把第一张和随机一张牌交换,第二次把第二张和随机一张牌交换…… 重复做 N 次。
当 N 大于等于 18 时,用这个方法洗牌后,居然恒等排列(identity permutation)是最有可能出现的。(所谓恒等排列大概是指第 n 张排在第 n 个位置)。论文太长没精力读,不过这个结论还真是让人惊奇啊。
上周去北师大、北邮、北理工三所高校作了题为“我的UCD思考”的小演讲(10.1以后还可能会去北大)。在学校里和大家的交流很有收获,让我对于国内UCD行业未来的发展和良好的人才储备更加充满期望。
回顾在三所高校中同学们提到的问题,结合我最近收到的一些咨询邮件,总结几个关于“产品设计和评估”的常见问题如下:
问题一,产品设计到了什么阶段才可以开始测试?是不是最早也要到有了高保真的界面原型才能开始测试?
1、这个说法是不对的,产品设计的任何阶段都可以进行测试,只要条件允许也都应该进行测试;
2、什么时候进行测试,其实取决于你对于产品有什么样的问题,只要你有问题都应该去做;
3、具体说一个例子:你现在要设计一个IM软件,和QQ基本相似;
那么,哪怕是在你的产品设计之初,只有简单想法还没有任何具体界面设计的时候,如果你有拿不准的问题一样可以通过测试解决。
你可能会问“我什么都没有,拿什么去测?”。“拿QQ呗”;
再往后,“纸原型”、“可简单演示的低保真原型”、“可互动的高保真原型”、“beta版本”都可以去做。
4、补充一下:我说到的“测试”不局限于“找用户来作”,一样包括“访谈”和自己的“评估”。
.
问题二,我们现在没有完善的“可用性实验室”,没有好的环境如何客服测试的问题?测试中您认为关键的问题有那些?
1、首先,产品的测试和评估并非一定要在实验室进行。测试应该是随时随地的,作为一个设计师必须要具备随时随地观察相关用户使用过程的“习惯”,这也是一种测试。
2、不得不说很多“科学”仪器和实验室“装备”都是极其“科学”的,但是否实用?甚至说是否有用?我持反对观点。
3、我个人认为作产品测试最关键的点有5点:测试的准备、测试的方法、被测的人、测试的人、测试的环境;
所谓“测试的准备”主要指“明确测试的目的性”和“准备测试的问题”。往往我们很容易搞清楚自己“为什么测试”,目的性都不是什么大问题;
但,“测试之前没有充分准备‘问题’测试中随机应变,导致测试结果大多没有什么价值”,这是大多数“经验丰富”之人常犯的错误,所以我建议:“在整个测试项目中,用50%的时间去做准备工作”;
然后,如何准备问题也是非常重要的。比如,一个关于语音搜索的产品测试,可以“从以往用户的录音中提炼问题来测试”而不要用“给话务员培训的对答脚本”来测试;
还有,某领导往往喜欢用自己遇到的问题去测试,当我提到“这不一定是用户的问题”时,领导反倒理直气壮的告诉我“我就是用户呀”,我只能回答他:“在咱们自己的产品面前您只能是领导,不是用户”…
关于“测试的方法”这个其实很简单,相信大多数科班出身的人都能很好的掌握。我只想不中听的提醒纯“心理学”专业的同学:站在“产品设计”的角度测试,而非纯粹的“心里测试”角度测试。
这么说只是因为我遇到不少“心理学”专业的朋友,他们给了我这种感觉,导致一些测试结果对于“产品”本身的直接意义很小。(并非说完全没有作用)
“被测的人”指“如何明确自己产品的针对性用户群,如何找到准确的典型用户”。这些都是我们成天提到的东西,无需我来讲;
往往“如何让被测者很好的与系统和测试者进行交互”其实是最大的课题,当你遇到一个“死活不说话、测试过程紧张无比”怎么都无法从他那里得到有效信息的被测者时,“暂时把话题扯开谈谈轻松的事情、聊聊家长、说说他喜欢的话题、甚至讲讲小笑话”都会是不错的做法。。。
“测试的人”我就不说了,只有一个建议:测试的人和总结测试报告的人要是同一人。
“测试的环境”是我最想强调的,这也是我个人一直不支持“在实验室”里测试的主要原因之一;我见过很多实验室设计的太“不自然”了(设计合理的实验室倒还好),用户在测试中根本没有平时使用的感觉;
我个人一般比较支持“低成本”的更加自然的测试环境,尽量不要改变用户平时用户的环境,只作为一个让他没有感觉到的“旁观者”或者“偷窥者”更合适。
还比如,测试一个语音搜索产品的话务员操作系统,“把话务员“关”到严肃的实验室用个大摄像头对着他,自己龟缩在单面玻璃后面”的“科学”方式,还不如“去话务员工作的地方,把话务员的显示器切为双屏显示,通过另外的耳机旁听话务员正常工作”效果更好。
.
问题三,在应用用户测试的结果上能不能给我们一些建议?
wow!这个问题比较大,很多理论性的做法已经很多地方可以看到相关资料了。我想说点主要的:
1、首先,再强调一下“测试和评估之前的准备工作十分重要”,往往我们的测试可能有两种情况──
第一种:你设计了两个杯子,你认为第一个设计比第二个设计好,你需要通过测试来验证你的观点;
第二种:你设计了两个杯子,你不知道那一个更好,你需要通过测试来得到答案;
如果你明确了你的目的,然后又做了充分的准备,我想“提炼结果”应该不是大问题。
2、不是所有用户说的都是对的,以用户为中心不等于“用户怎么说就怎么作”。
我见过一个人,测试中用户说“我觉得这个地方全部展开不好,太占空间了,应该收缩到下拉菜单里”,用户一走他马上就心花怒放的去改了。问他为什么?他告诉我:“这是用户说的”!
第二天又测试了一个用户,这个用户说“这个地方其实很重要,收缩起来可能找不到,你应该给展开”。他晕了,问我“怎么办?”,我回答他:“我不是用户,”。
3、其实我想说:“把用户的测试当作意见来源,而非指示来源。
既然是意见就需要‘筛选’”,“提炼用户研究的结果最关键还是你自己的思考和辨别能力”,这种能力只能靠“你比任何人都更深入理解产品和用户”。同我回答“如何做好搜索引擎的用户研究?”一样:最基础的还是“至少每天搜索200个字以上”。
.
问题四,“专家评估”是不是就是站在产品专家的角度去使用产品,然后总结出来设计的问题?
和我们作启发式评估不同,启发式评估往往完全可以对产品没有任何了解,就只是用户的角度去作即可;但专家评估往往是站在专家的角度“用用户的模式思考”。
我个人一直比较主张:“专家评估”之前一定要熟悉“产品架构和业务流程”,因为你提出的不应该只是“用户的问题”,还得包含“产品的因素”,这样才能很好的直接应用。
专家评估的问题总结需要有技巧性,尽量要让问题的表现更加明了而且要出来修正的办法。我自己往往会用PPT的方式,先把问题分类然后再展示问题表现、问题分析、危险程度、修正办法等
.
问题五,当数据统计和用户访谈结果出现不一致时,应该怎么选择?
呵呵,这个问题听起来比较棘手;
1、首先我建议你去找一找数据统计或用户访谈在什么地方出错了;
2、我向来认为“数据”和“用户”是两个互相依赖的部分,数据是支撑用户结果的依据,用户可以找到数据现象发生的缘由;
3、往往我们只看数据不知道“这是为什么”,这个时候我们需要通过和用户的接触去了解数据现象背后的原因;如果只靠数据就下一个背后原因的结论,大多数时候是很危险的;
4、往往我们只根据用户反应的情况,就去作一个大改动也是不合适的,因为他可能是片面的,这个时候我们需要用数据去论证他。
.
.
最后,总结一下:
1、产品的任何阶段都可以进行测试,无需等待完整的设计完成之后;
2、测试和评估是随时随地的;
3、不一定在实验室的测试和评估就更好,我个人比较排斥那种“不自然”的方式;
4、把“数据”和“用户”相结合很重要;
5、作专门测试项目时,拿出50%的时间作准备工作;
6、测试的目的:验证观点或者得到观点;
7、读懂数据和提炼用户测试结果的基础是:深入理解自己的产品和用户。
转载请注明出自UCDChina.com,谢谢。
师姐闾丘露薇在my1510上建了一个题为“新闻课堂”的圈子。这个圈子里的作者和作品,基本上都是她在浸会大学Current Issues and Case Studies in International News课程的学生。挺不错的构想,教育2.0。我注意到在一份习作中,有位网友留言说:
似乎有一些经济基础的人看了以后才会有些反应和想法。
问题:传媒人员是否应该硬性要求进修经济?
单从字面上看,我不知道这位网友对学传媒的人是否应该学经济学持何观点。但这个留言,结合我最近的一件事,倒是让我颇有一些感慨。
台湾政大的罗文辉教授近日到访上海交大媒体与设计学院,就他关于“置入性营销”这个问题的研究做了一次讲座。在他的定义中,新闻和广告的混杂(俗称软文)就是一种置入性营销。不止台湾,大陆这方面的例子也实在太多了,我就不想一一罗列。
我也受过标准的新闻专业主义的教育,很清楚新闻一旦被做成软文会是怎样的一个悲惨结局。但不同于很多一直在书斋里待着的研究者,我深知这是无可避免的现实。现实有时候真得很无奈,梦想,有时候总需要低头。
但是,低头不是彻底的屈服。在新闻和广告对版面的争夺中,我从来不以为会有彻底的新闻专业主义,也反对彻底的新闻广告化。就像宗教里说的,当恶不存在时,善也就消失了。永远是一个“度”的问题,也就是我们中国人伟大的哲学:中庸。
广告对于新闻的侵蚀,某种意义上讲,就是”传媒经济学“所涉及到的部分。这个世界没有任何一种商业象传媒那样是三方模式的(媒体、受众、广告主)。媒体打包出售受众,就势必会受到广告主(不仅是商业,还有政府)的步步进逼。这是一个从神权、君权过渡到金权的社会,漠视这个现实而一味鼓吹新闻专业主义,我认为是乌托邦式的,也是于事无补的。
我感觉到的solution是:学传媒的人掌控媒体。默多克购并华尔街日报遭来嘘声一片的原因就是:他是一个Businessman,不是一个Journalist。只有学过新闻专业主义的人,潜意识里才会有对传媒的良知。
学传媒的人,除了立志去做记者编辑,或者搞传播研究,还有一个很重要也很当仁不让的路径是:去做媒体的老板。只有真正掌握一个媒体,才有可能在新闻和广告中取得一个平衡。指望商人们良心发现,无异于与虎谋皮。
就有人说了,学传媒的人去做老板?可能性不大罢。是的,我也知道可能性比较小。但如果学传媒的人不学点经济学,那可能性就小了,那才是自动的缴械投降,那才是对新闻专业主义的事实背叛。
十月 2007 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 日 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |