计算机科学

为学生,研究人员和计算机科学从业者提供的问答

2
如何设计一种算法来在屏幕上排列(可调整大小的)窗口以覆盖尽可能多的空间?
我想编写一个简单的程序,该程序接受一组窗口(宽度+高度)和屏幕分辨率,并在屏幕上输出这些窗口的排列,以使窗口占用最大的空间。因此,可以在保持output size >= initial size纵横比的同时调整窗口的大小 。所以对于窗口iii,我希望该算法返回一个元组(x ,y,w ^ 我d吨ħ ,ħ È 我克ħ 吨)(x,y,width,height)(x, y, width, height)。 我相信这可能是2D背包的变形。我曾尝试遍历整个网络的结果,但是它们大多数都有很多背景(并且没有实现),这使我难以理解。 我对最快的算法不太感兴趣,但对满足我的特定需求的实用工具却更感兴趣。

1
SAT本地搜索的支持数据结构
WalkSAT和GSAT是解决布尔可满足性问题的众所周知的简单本地搜索算法。从实现GSAT算法-如何选择要翻转的文字的问题中复制了GSAT算法的伪代码。并在下面介绍。 procedure GSAT(A,Max_Tries,Max_Flips) A: is a CNF formula for i:=1 to Max_Tries do S <- instantiation of variables for j:=1 to Max_Iter do if A satisfiable by S then return S endif V <- the variable whose flip yield the most important raise in the number of satisfied clauses; S …

7
Unix / C中不一致和不完整的例子有哪些?
在理查德·加布里埃尔(Richard Gabriel)的著名文章《更糟的崛起》中,他将MIT / Stanford(Lisp)和新泽西(C / Unix)设计哲学的漫画版本沿简单性,正确性,一致性和完整性进行了对比。他举例说明了“ PC失败者的问题”(Josh Haberman在其他地方讨论过),以为Unix优先于实现的简单性而不是接口的简单性。 我想出的另一个例子是不同的数字方法。Lisp可以表示任意大的数字(最大取决于内存的大小),而C将数字限制为固定的位数(通常为32-64)。我认为这说明了正确性轴。 有什么例子可以保持一致性和完整性?以下是加百列的所有描述(他承认是漫画): 麻省理工学院/斯坦福大学的方法 简单性-设计必须在实现和界面上都简单。接口要比实现简单,这一点更为重要。 正确性-设计在所有可观察的方面都必须正确。根本不允许不正确。 一致性-设计一定不能不一致。为了避免不一致,允许设计稍微简单一些,不太完整。一致性与正确性一样重要。 完整性-设计必须涵盖尽可能多的重要情况。必须涵盖所有合理预期的情况。不允许过分简化完整性。 新泽西州方法 简单性-设计必须在实现和界面上都简单。简单的实现比接口更重要。简洁是设计中最重要的考虑因素。 正确性-设计在所有可观察的方面都必须正确。简单比正确要好一些。 一致性-设计一定不能过分不一致。在某些情况下,为了简化起见,可以牺牲一致性,但是最好将设计中处理不常见情况的那些部分放掉,而不是引入实现复杂性或不一致。 完整性-设计必须涵盖尽可能多的重要情况。所有合理预期的情况都应包括在内。可以牺牲完整性来支持任何其他质量。实际上,每当实现简单性受到威胁时,都必须牺牲完整性。如果保持简单性,可以牺牲一致性来实现完整性。尤其是一文不值的是接口的一致性。 请注意,我并不是在问Gabriel是否正确(这个问题不适用于StackExchange),而是要举例说明他可能一直在指的是什么。

3
半峰-NP完全问题
首先,我要指出这是一个作业问题,请仅提供建议和相关意见,请不要直接回答。话虽如此,这就是我要解决的问题: 让HALF-CLIQUE = { | G是具有至少n / 2个节点的完整子图的无向图,其中n是G }中的节点数。证明HALF-CLIQUE是NP完整的。⟨G⟩⟨G⟩\langle G \rangleGGGn/2ñ/2n/2GGG 另外,我知道以下几点: 就此问题而言,集团定义为输入图的无向子图,其中每两个节点由一条边连接。甲 -cliquekķk是包含一个集团节点。kķk 根据我们的教科书,迈克尔·西蓬瑟的“ 介绍计算理论 ”,第268,这个问题CLIQUE = { | G是一个无向图,其中k -clique}在NP中⟨G,k⟩⟨G,ķ⟩\langle G,k\rangleGGGkķk 此外,根据同一资料(第283页),我们注意到CLIQUE存在于NP-Complpete中(因此也显然存在于NP中)。 我想我在这里有答案的内核,但是我可以使用一些指示来说明问题所在或与答案有关的任何相关要点。到目前为止,这是我的基本想法, 好吧,我首先注意的证书只会是一个半QLIQUE 。现在看来,我需要做的是创建一个检验器,该检验器是从CLIQUE(我们知道是NP-Complete)到HALF-CLIQUE的多项式时间缩减。我的想法是,这将通过创建一个图灵机来完成,该图灵机在本书中为CLIQUE运行图灵机验证程序,并为HALF-CLIQUE附加约束。size≥n/2尺寸≥ñ/2\text{size} \geq n/2 这听起来对我来说是正确的,但我还不太相信这个学科。我想再次提醒大家这是一个家庭作业问题,因此请避免回答这个问题。任何不符合此要求的指导都将受到欢迎!

1
自动定理证明的类型
我正在独自学习自动定理证明 / SMT求解器 / 证明助手,并从此处开始发布有关该过程的一系列问题。 哪些相关的自动定理证明是正确的?我找到了定理证明的评论 这仍然是最新的吗? 哪些仍然非常活跃,即,哪些人目前正在创建它的小组之外使用? 在此处找到系列的下一个问题。

2
创建自排序二叉树
我有一个作业,需要使用二叉搜索树并将其更改为自身自定序,以使访问最多(优先级更高)的项目位于树的顶部,根是访问最多的节点。 教授给了我可以使用的BST和节点结构,但是在插入事物时试图让我的脑袋绕开更新树的算法,这使我感到困惑。 我知道随着插入的进行,它会检查当前节点的数据是否小于或大于当前节点,然后递归地以正确的方向运行,直到找到空指针并将其自身插入那里。并将其插入后将优先级增加1。 template <class Type> void BinarySearchTree<Type> :: insert( const Type & x, BinaryNode<Type> * & t ) { if( t == NULL ) t = new BinaryNode<Type>( x, NULL, NULL ); else if( x < t->element ) insert( x, t->left ); else if( t->element < x ) insert( …

3
计算素数模的阶乘最有效的方法是什么?
您知道有什么算法可以有效地计算模后阶乘吗? 例如,我要编程: for(i=0; i<5; i++) sum += factorial(p-i) % p; 但是,p直接应用阶乘是一个很大的数字(素数)。(p≤108)(p≤108)(p \leq 10^ 8) 在Python中,此任务确实很容易,但是我真的很想知道如何优化。

1
追踪运动目标的算法
假设我们有一个黑匣子,我们可以查询和重置它。当我们复位,状态的被设定为在从所述一组随机选择的均匀的元素其中是固定的并且已知的用于给定。为了查询,提供了的元素(猜测),返回的值为(f_S-x)\ mod n。另外,该状态F_S的˚F被设定为值F_S” = F_S \ PMķ,其中ķ从均匀地选择随机fffffffSfSf_Sfff{0,1,...,n−1}{0,1,...,n−1}\{0, 1, ..., n - 1\}nnnffffffxxx{0,1,...,n−1}{0,1,...,n−1}\{0, 1, ..., n - 1\}˚F 小号 ˚F ˚F ' 小号 = ˚F 小号 ± ķ ķ { 0 ,1 ,2 ,。。。,⌊ Ñ / 2 ⌋ - (( ˚F 小号 - X )(fS−x)modn(fS−x)modn(f_S - x) \mod nfSfSf_Sffff′S=fS±kfS′=fS±kf_S' = f_S …

3
正式方法之路
看到学生只有有限的数学和计算机科学方面的背景才开始攻读博士学位的情况并不少见。显然,这样的学生很难成为理论计算机科学家,但如果他们能够精通使用形式方法和阅读包含形式方法的论文,那将是很好的。 初学博士学位的学生可以遵循一条良好的短期途径来获得所需的曝光度,以使他们阅读涉及形式方法的论文并最终撰写使用这种形式方法的论文? 在上下文方面,我在理论B和形式验证方面的思考更多,是他们应该学习的东西,而且还涉及传统的TCS主题,例如自动机理论。

1
可判定问题的比例
考虑用某种“合理的”正式语言陈述的决策问题。假设以一个自由变量作为参考框架的高阶Peano算术中的公式,但我同样对其他计算模型感兴趣:丢番图方程,使用Turing机重写规则产生的单词问题等。古典形式化会很好,尽管如果您知道形式化的选择对答案有多大影响,那也会很有趣。 鉴于长度决策问题的声明,我们可以定义数d (ñ )的长度可判定语句ñ和数量ü (ñ )的长度不可判定语句ñ。ñNNd (Ñ)D(N)D(N)ñNNü(N)U(N)U(N)ñNN 关于和D (N )的相对生长情况知道什么?换句话说,如果我随机处理格式正确的决策问题,那么对于给定的语句长度,可以决定该决策问题的概率是多少?ü(N)U(N)U(N)d (Ñ)D(N)D(N) 受到这个问题的启发,该问题询问“大多数问题和算法是否可决定”。好吧,如果您不按兴趣过滤,是吗?

1
实现GSAT算法-如何选择要翻转的文字?
GSAT算法在大多数情况下是直截了当的:您获得了合取范式的公式,然后翻转子句的文字,直到找到满足该公式的解,或者达到了max_tries / max_flips限制,而没有找到解。 我正在实现以下算法: procedure GSAT(A,Max_Tries,Max_Flips) A: is a CNF formula for i:=1 to Max_Tries do S <- instantiation of variables for j:=1 to Max_Iter do if A satisfiable by S then return S endif V <- the variable whose flip yield the most important raise in the number of …

3
什么时候两个模拟不是双模拟?
给定一个标记的过渡系统 ,其中小号是一组状态,Λ是一组标签,并→ ⊆ 小号× Λ × 小号是三元关系。与往常一样,写入p α →交通 q为(p ,α ,q )∈ →交通。将标记的过渡p α →交通 q表示在状态中的系统p改变状态到q与标签(S,Λ ,→ )(S,Λ,→)(S,\Lambda,\to)小号SSΛΛ\Lambda→交通⊆小号× Λ × S→⊆S×Λ×S\to\subseteq S\times\Lambda\times Sp →αqp→αqp \stackrel\alpha\rightarrow q(p ,α ,q)∈ →(p,α,q)∈→(p,\alpha,q)\in\top →αqp→αqp\stackrel\alpha\to qpppqqq,表示 α是引起状态变化的一些可观察动作。αα\alphaαα\alpha 现在关系被一个称为模拟当且仅当 ∀ (p ,q )∈ [R , 如果 p α →交通 p ' 然后 ∃ q ',ř …


3
当今的大型并行处理单元是否能够高效运行细胞自动机?
我不知道如今的图形卡中提供的大规模并行计算单元(例如在OpenCL中可编程的一种)是否足以有效地模拟1D细胞自动机(或2D细胞自动机?)。 如果我们选择适合芯片内存的有限网格,是否可以期望在(恒定)恒定时间内计算出在此网格上定义的元胞自动机的一次跃迁? 我认为2D细胞自动机比1D自动机需要更多的带宽来进行芯片不同部分之间的通信。 对于FPGA编程或定制芯片,我也会对同一问题感兴趣。

5
为什么用相同的一次性密码加密效果不好?
要使用一次性密钥加密消息,请执行 。 ķ Ë Ñ Ç (米1,ķ )= 米1 ⊕ ķm1米1个m_1kķkEnc(m1,k)=m1⊕kËñC(米1个,ķ)=米1个⊕ķEnc(m_1,k) = m_1 \oplus k 如果使用相同的加密不同的消息则会得到 ,如果对两个密文执行Xor,则将得到 米2 ë Ñ Ç (米2,ķ )= 米2 ⊕ ķ (米1 ⊕ ķ )⊕ (米2 ⊕ ķ )= 米1 ⊕ 米2kķkm2米2m_2Enc(m2,k)=m2⊕kËñC(米2,ķ)=米2⊕ķEnc(m_2,k) = m_2 \oplus k(m1⊕k)⊕(m2⊕k)=m1⊕m2(m1⊕k)⊕(m2⊕k)=m1⊕m2( m_1 \oplus k) \oplus ( m_2 \oplus k) = …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.