标签: computer-science

为什么我们不能通过简单的迭代来确定图是否是二分图?

这就是我要解决的问题

我们想要将一组 n 人(标记为 1 到 n)分成任意大小的两组。每个人都可能不喜欢某些人,他们不应该加入同一群体。给定整数 n 和数组 dislikes,其中 dislikes[i] = [ai, bi] 表示标记为 ai 的人不喜欢标记为 bi 的人,如果可以通过这种方式将每个人分成两组,则返回 true。

这可以通过 Python 中的 BFS 相当简单地解决:

def possibleBipartition(self, n: int, dislikes: List[List[int]]) -> bool:
    graph = defaultdict(set)
    for a, b in dislikes:
        graph[a-1].add(b-1)
        graph[b-1].add(a-1)

    q = deque({0})
    colors = [None]*n
    for i in range(n):
        if colors[i] is None:
            q = deque({i})
            colors[i] = 0
            while q:
                cur = q.popleft()
                for d in graph[cur]:
                    if colors[d] is None:
                        q.append(d)
                        colors[d] = 1 …
Run Code Online (Sandbox Code Playgroud)

computer-science graph-theory breadth-first-search bipartite

2
推荐指数
1
解决办法
77
查看次数

计算机模拟:资源如何密集?

题:

  • 计算机模拟如何,通常是资源密集型?

例如,Simul8:一个离散事件模拟包 - 为什么这个计算密集,哪些因素(计算)对此有贡献?

simulation computer-science

1
推荐指数
1
解决办法
306
查看次数

1
推荐指数
1
解决办法
383
查看次数

软件事件如何在内部工作?

我是计算机科学专业的学生,​​在计算机程序运行的过程中学到了很多关于"幕后"的基本概念.但最近我意识到我不明白软件事件如何有效地工作.

在硬件中,这很容易:代替处理器"忙着等待"以查看是否发生了某些事情,组件发送中断请求.

但是,这是如何工作的,例如,鼠标悬停事件?我的猜测是:如果鼠标发送信号("移动"),操作系统计算其新的位置p,然后检查什么程序正在在屏幕上绘制,告诉程序位置P,则程序本身检查什么object位于p,检查是否有任何事件处理程序与所述对象关联并最终触发它们.

这对我来说听起来非常低效,因为微小的鼠标移动等同于许多cpu上下文切换(我学到的相对昂贵).然后有许多后台应用程序也可能想要自己做一些事情.

我的直觉在哪里失败了?我意识到即使是"慢速"的500MHz处理器每秒也能完成5亿次操作,但对于这样一个简单的事件来说,它似乎仍然有太大的作用.

提前致谢!

language-agnostic performance events computer-science

1
推荐指数
1
解决办法
188
查看次数

是否存在无损的除法算法?

数学(像p * 1/p = 1)中的方程总是会在计算机中存在吗?

computer-science

1
推荐指数
1
解决办法
171
查看次数

指针数组

我正在尝试构建一个m-way树,我无法可视化指向B_tree节点类的不同实例的指针数组(这基本上创建了数组类型节点,并包括与树相关的所有函数,如count,insert等等)

对于这种情况,是否有任何提示/技巧可视化指针数组?是否有任何好的链接/资源来解释指针数组?(我没有在谷歌上找到有用的常见搜索结果)...

arrays tree computer-science pointers b-tree

1
推荐指数
1
解决办法
353
查看次数

在已经指定运行时间时解决算法中的问题,例如theta(nlogn)

我这个学期已经学过算法课程,我正试图解决CLRS中的一个问题

2.3-7描述一个theta(n lg n)时间算法,给定一组n个整数和另一个整数x,确定S中是否存在两个元素,其和是x.

我不知道如何处理这个问题.我试图使用合并排序算法解决它,因为它在nlogn时间内完成,但我不知道它是否是正确的方法.

任何人都可以告诉我在已经指定运行时间时解决算法时的一般方法是什么?

谢谢.

algorithm big-o computer-science

1
推荐指数
1
解决办法
153
查看次数

一些NP-Complete问题怎么也是NP-Hard?

我正在尝试以一种直观的方式将我听到的P,NP,NP-Complete和NP-Hard包裹起来,以便我不必记住他们的定义.

在下图中(左手方案,P!= NP),NP-Complete和NP-Hard之间存在重叠区域.这是否意味着一些问题既是NP-Complete又是NP-Hard?根据这个特殊的答案,我发现这是矛盾的:NP,NP-Complete和NP-Hard之间有什么区别?.

上面链接中的表说NP-Complete问题在多项式时间内是可验证的,而NP-Hard问题则不是.那怎么会有重叠呢?

在此输入图像描述

complexity-theory computer-science np-complete np-hard

1
推荐指数
1
解决办法
1392
查看次数

如何在多类分类中为每个类计算F1度量?

我使用SciKit作为库来处理分类算法,如:NB,SVM.

这是" SPAMHAM " 电子邮件的一个非常好的和精细的二进制分类实现:

    confusion += confusion_matrix(test_y, predictions)
    score = f1_score(test_y, predictions, pos_label=SPAM)
   //note in my case 3-classes I do not need to set [pos_label]
Run Code Online (Sandbox Code Playgroud)

如果我有三个类,如{SPAM,HAM,NORMAL}而不是两个,那么:我如何调整该代码以找到每个类的F1-Score以及所有类的平均值.

computer-science machine-learning nltk text-classification

1
推荐指数
1
解决办法
548
查看次数

为什么在2的补码乘法中丢弃MSB?

当我们对2的补码数进行乘法时,我很难理解为什么我们丢弃MSB.

我们以101(十进制:-3)和011(十进制:3)为例.算法是这样的:首先我们将数字的长度加倍,然后我们像在学校那样用小数进行通常的乘法,然后我们采用(加倍长度)*2 = 6个最低有效位.

  1. 双倍长度:

    101 -> 111101
    011 -> 000011
    
    Run Code Online (Sandbox Code Playgroud)
  2. 乘法:( 111101 * 000011 = 10110111十进制:-73)

如我们所见,这个结果是错误的.

  1. 取6个最低有效位(丢弃2个最高有效位). 10110111 -> 110111(十进制:-9)

因此结果变得神奇地正确.怎么解释这个?我知道MSB有点特殊,我在学校使用的规则不能100%适合2的补充,但是虽然我完全理解学校的乘法规则,但我无法绕过2的最后一步.补码乘法(我理解前两步).

computer-science multiplication bit twos-complement

1
推荐指数
1
解决办法
770
查看次数