使用深度搜索分析心理调查问卷的研究

使用深度搜索分析心理调查问卷的研究

背景

昨天我女朋友发了一个心理调查问卷要我做。我向来对这种形似心理调查问卷嗤之以鼻: 一个人的性格怎么可能由几个简单的问题决定。但作为技术人员,我决定用技术的手段分析这份调查问卷,向女朋友证明其缺乏科学性。

调查问卷的原版如下图

有兴趣的朋友可以玩玩~

我想了解如下几个问题:

1. 问卷是不是有环路?如果有环路,则可证明这份问卷不正规。

2. A 答案是不是不可能达到?因为4个答案中,只有A答案没有同的倾向。

3. 如果 A 答案能到达,那么有多少种可能?占比是多少?

分析

这种问卷调查有特点:每一个题目都对应多个选项;每一个选项,都对应一个题目或者答案。从一个人答题的路径来看,其实这就是一个典型的图结构。

结合我想了解的问题,有如下几个方面需要考虑:

1. 证明图没有环路

2. 使用DFS证明A是可以达到的

3. 统计所有的可能的结果,算出A的占比

建模

我打算使用 列表模式 构建图

  @list = [
    [1],
    [2,3],
    [3,4],
    [4,5,6],
    [5,6,7],
    [6,7],
    [7,8,9],
    [8,9],
    [9,10,11],
    [10,11,12],
    [12,13],
    [13,14],
    [13,15],
    [15,18,14],
    [15,18],
    [16,18],
    [17,18,19,20],
    [20,21,‘B‘],
    [19,‘C‘],
    [22,‘A‘],
    [21, ‘D‘],
    [22, ‘B‘],
    [‘A‘, ‘C‘, ‘D‘]
  ]

图的节点有 0 到 22, 再加上 A, B, C, D。

1. 因为我不想处理下标,所以图的起始位置,我设置成0;

2. 图的节点,我简单的用数组的下标表示;

3. 答案直接输出,不需要放在节点的集合中;

DFS

图有没有环路

代码如下:

def has_cycle?
  recursion_stack = [false] * 23

  check_cycle(0, recursion_stack)
end

def check_cycle(vertex, recursion_stack)
  recursion_stack[vertex] = true

  @list[vertex].each do |node|
    next if over?(node)

    return true if recursion_stack[node]
    check_cycle(node, recursion_stack)
  end

  recursion_stack[vertex] = false

  return false
end

其中 over?方法是用来判断递归是否结束。

def over?(point)
  [‘A‘, ‘B‘, ‘C‘, ‘D‘].include?(point.to_s)
end
  1. has_cycle 来判断是否有回路,我将一次完全迭代的节点是否访问到了的信息保存在recursion_stack
  2. 它调用 深度搜索 算法实现的 check_cycle

运行得出的结果是 false

A 可以到达吗?A如果可以到达,那么A的可能性有多大?

@result = []

def dfs(node)
  @list[node].each do |vertex|
    if over?(vertex)
      @result << vertex
      next
    end

    dfs(vertex)
  end
end

使用深度有限搜索, 将最后的结果保存在 @result中,将结果打印出来。

def count_charactor(result, charactor)
  result.count { |item| item == charactor }
end

dfs(0)

puts "一共有 %d 可能的答案" % @result.size
(‘A‘..‘D‘).to_a.each do |charactor|
  puts "#{charactor}: %d 种可能, 占比为 %f" % [ count_charactor(@result, charactor), count_charactor(@result, charactor).to_f / @result.length]
end

结果如下:

一共有 27860 可能的答案
A: 8960 种可能, 占比为 0.321608
B: 3360 种可能, 占比为 0.120603
C: 8120 种可能, 占比为 0.291457
D: 7420 种可能, 占比为 0.266332

输出能到答案A的100路径

@i = 0

def dfs(node, stack)
  stack.push node

  @list[node].each do |vertex|
    if over?(vertex)
      @result << vertex

      if vertex == ‘A‘
        @i += 1
        puts "到A的路径有:"
        puts stack.join(" -> ")
      end

      break if @i == 100

      next
    end

    dfs(vertex, stack)
  end

  stack.pop
end

用一个栈stack来保存路径, 到A点将所有的结果输出

总结

图的算法应用真的很广泛,值得深入研究。有时候将实时中的问题抽象成图的问题,能让我们从另外的一个角度看问题。再则,用ruby实现图的算法也是很简单的。dfsbfs简单,但收到程序栈的限制。但比较适合本程序。

时间: 2024-08-08 14:17:18

使用深度搜索分析心理调查问卷的研究的相关文章

大学生对技术网站需求的调查问卷结果分析

参与本问卷调查的共计134人,七成的调查人员是计算机相关专业本科生,与我们的主要客户大体上是一致的,所以该调查问卷的结果还是具有很大程度的参考意义. 使用技术网站的目的 调查结果表明:大部分用户使用技术网站的目的是咨询自己在编程中遇到的问题和bug,以及查询专业术语和技术文档等.根据这个结果,一方面,我们考虑在Beta阶段,首先将Question部分的功能移植到新版本上,并进行一定的修改,使可用性更强.另一方面,要加强与数据处理组的沟通,将网站上展示的数据更多的偏向专业术语和技术文档. 平时使用

独立游戏开发调查问卷结果分析及设想实现

初步游戏设想为沙盒生存类,于是通过网络调查问卷稍微收集了27位用户的意见.总结如下 首先,在“爱玩的游戏类型”选项中,18/27的用户选择了RPG(角色扮演类型),占据了绝大多数.这个与我们游戏的开发设想一致——生存类本身就属于RPG的一种分支. 15/27人一天的游戏时间在1小时到3小时之间,所以游戏单次流程需要控制在两小时左右. 因为超过半数(16/27)的用户比较倾向于联机游戏,所以决定在游戏的单机部分完成后在其中加入局域网联机功能,可以选择合作或者对抗. 13/27的用户对于游戏的要求是

调查问卷实践总结

这次设计调查问卷的题目,我参与度不够.反思. 调查问卷的整个环节,从设计题目,到发布问卷,鼓动身边朋友同学去填写,最后对结果进行分析.走完这整个流程,还是和我想的有些不一样. 比如: 1.我以为填写问卷的都是生活背景,经历相似的同龄人,所以调查结果应该和作为开发者的我们想法差不多.但事实上,收集结果后,还是对结果有些许意外.果然,用户需求不好琢磨. 2.我不认为调查问卷是最好的收集用户需求信息的途径,作为同样曾“被调查的对象”,我就算看到弹出的所谓有奖填问卷的对话框也不会想去填.调查问卷调查不出

创建二叉树 树的深度搜索 广度搜索

树的深度搜索 与树的前序遍历同理 根节点->左孩子->右孩子  树的广度搜索 与树的层次遍历同理 一层一层遍历内容 深度搜索 采用stack的适配器 先进后出原则  而广度搜索采用的queue适配器 先进先出原则 二者正好满足 搜索需求 简要代码如下: #include <iostream> #include <stack> #include <queue> #include <malloc.h> using namespace std; typ

调查问卷与心得体会

现在我们已经到了软件项目中重要的需求分析阶段,也就是我们要做自己的需求文档.在此之前,我们就需要对用户或者目标客户的需求了解透彻.因此我们使用问卷调查来获得大量目标客户需求.在老师的教导下我们学会了调查表的制作,我觉得制作调查表的难度比分析调查问卷后的数据的难度要大得多,因为需要考虑很多问题. 由于没有经验,在设置问题上也很迷糊,不知道设置哪些问题,因为我们不知道我们要怎么设问才会收集到我们所需要的信息.老师给了我们几个要求: 1.不少于100份的有效数据: 2.分析有效数据并得到调查结果. 我

通过Python实现自动填写调查问卷

0X00 前言 快开学了,看到空间里面各种求填写调查问卷的,我才想起来貌似我也还没做.对于这种无意义的问卷,我是不怎么感冒的,所以我打算使用"特技"来完成,也就是python,顺便重新复习一下python,真的好久没用了.下面,表演开始-- 0X01代码编写思路 首先先创建一份问卷 我们随便填写一个问卷并提交,在提交之前开启Burpsuite截获数据包 对于截获的数据包进行分析,有的被url编码了不利于分析,可以使用Burpsuite编码模块解码替换,这样就好分析了 通过观察可以发现,

关于“问吧”调查问卷的心得体会

“问吧”APP是一个关于提问,回答,分享经验等的群体决策软件,是我们团队正在进行的一个项目,为了更好地了解市场需求 和完善我们项目的需求设计,我们开始了这次的问卷调查. 毋庸置疑,进行调查问卷最重要的是要制定一份合理有效的问卷调查表,而这无疑也是最难的一部分.在经过了对我们项目的 不断分析和“剖析”过后,我们也只是写出了几个问题,好多的问题都是在被提出时又被否定了,最后在大家的努力下终于制定出一 份相对完美的问卷:接下来就是问卷的分发,为了更方便,我们采取了在网络上发链接的方式请别人填写问卷调查

android 实现调查问卷-单选-多选

很久没写东西了,今天来总结下有关android调查问卷的需求实现. 转载请加地址:http://blog.csdn.net/jing110fei/article/details/46618229 先上效果图 个人分析,最好是用动态布局加载来实现,好了,说思路,将这整体分为3块 最外面这个布局里面,根据第二层问题的数量来动态生成布局,加入在第一层布局里面, 然后再根据问题下答案的数量来动态生成布局,加入第二层布局里面,思路这么透彻,想想还有些小激动呢. 先建造三个实体类 public class

如何在Sharepoint Online中创建调查问卷

现在做市场活动常常需要采集用户信息,给所有的用户都打印一张问卷调查,问卷调查收集回来之后需要做录入Excel的动作,需要统计每条问题的数据,再由统计的人员将相关信息发送到各个相关部门,其实中间需要很多时间,也浪费很多人力.如果是客户对产品的反馈问卷,一旦客户有兴趣想了解,而整个数据的反馈如果超过3天,那么对于销售人员的及时跟进是有影响的. 和几位广告行业的朋友交流后得知,目前我们这个行业的乙方,在帮助客户去做渠道大会.客户大会的时候,依然还是使用传统的纸质打印问卷的方式,并且客户目前也还是停留在