计算布尔函数密度的算法
我正在尝试编写一个程序,该程序需要计算处理布尔函数的特定值.给定一个单输出布尔函数f,盖子f给出,假设我将函数的密度定义为所有输入向量的分数,其中该函数具有值1. 例如,假设我传递给定函数f(a,b,c),该函数由封面f = ab'+c'定义.该函数具有5个固定的矿物质,总计8个矿物质,因此其密度为d(f)= 5/8 = 0.625.应该注意的是,立方体AB覆盖了2个Minterm,并且Cube C覆盖了4个Minterm,但其中一个Minterms被两个立方体覆盖. 任何人都可以想到一个好的算法来处理这个问题吗?我非常怀疑它将最好地递归地表达,但是我很难确定一些有效的东西. 解决方案 坏消息:没有希望总是很快的算法. 即,这个问题: 给定布尔公式以连接的法线形式(总和的乘积),确定是否存在自由变量的分配,以使公式产生true 是NP完整的.这意味着,如果您发现解决该算法的多项式算法可以解决它,则可以在多项式时间内解决世界上一些最困难的问题(knap
2 2024-01-23
编程技术问答社区
如何检测门逻辑模拟中的振荡?
我正在C#中编写基于周期的逻辑模拟.我想模拟组合和顺序电路.组合电路很简单,但是顺序的电路给了我麻烦. 我想检测振荡并显示适当的警告消息.是否有一种简单的方法可以检查单个门可以更改其状态并仍然使电路稳定多少次? 我想到了"最小反馈弧集算法",但这似乎是一个过度杀伤.许多桌面应用程序都可以快速执行此操作,因此我怀疑他们正在使用它. 我还发现了建议使用三元逻辑(0、1,未知)和分为两部分的算法的论文 - 一个初始化电路和一个进行实际计算 - 但是它说的是诸如'如果算法A不得终止电路具有振荡,因为没有办法停止时钟周期并警告用户. 有什么想法,例如" Logisim"或" Digital Works"之类的应用程序检测振荡? 解决方案 verilator 是一种逻辑模拟器进入C代码. 它试图构建一个逻辑顺序,该顺序将保证是稳定的,但是如果失败了,它会发出一些UNOPT和UNOPTFLAT警告,并简单地重复多次模拟,直到什么都没有改变为止. . 默认情
2 2024-01-23
编程技术问答社区
生成n个变量的所有可能的布尔函数的算法
对于n个变量,存在2^(2^n)不同的布尔函数.例如,如果n = 2,则存在16个可能的布尔函数,可以以产品形式或总和的乘积编写.可能功能的数量用n. 呈指数增加 我正在寻找一种算法,该算法可以为N变量生成所有这些可能的布尔规则.我试图在各个地方进行搜索,但到目前为止还没有找到任何合适的东西.大多数算法与简化或减少布尔函数为标准形式有关. 我知道,即使对于n = 8或9,规则的数量也太大了,但是如果存在,请有人帮助我使用相关算法? 解决方案 n 变量的布尔函数具有 2^n 可能的输入.可以通过在范围0
4 2024-01-22
编程技术问答社区
简化布尔表达式算法
有人知道一种简化布尔表达式的算法吗? 我记得布尔代数和karnaught地图,但这是针对埃维特希(Everithing)的数字硬件.我想考虑到某些子表达不是布尔值的事情. 例如: a == 1 && a == 3 这可以翻译成纯净的布尔表达: a1 && a3 ,但这是不可约的,而对Everibody的算术知识也可以确定表达只是: false 有些身体知道一些链接? 解决方案 您可能对 k-maps 和 quine -mcccluskey algorithm . 我认为Sympy能够解决并简化布尔表达式,查看源可能很有用. 其他解决方案 您的特定示例将通过 smt solver . (它可以确定变量的设置不可能使表达式成真;因此它始终是错误的.更简化此类求解器的范围不超出范围.)表明表达式等于true或false是当然,即使没有将算术纳入交易,NP-Hard即使没有将算术算起,因此甚至还有很多实用的软件也很酷.根据范围中的
0 2024-01-22
编程技术问答社区
如果源列中的任何一列为真,则将布尔值累积为真。
说我有下表: id column_a column_b column_c 1 t f t 2 t f f 3 f t f 从上表中,我想: select rows from id = 1,2; 结果应为: column_a column_b column_c t f t 如果已定义的ID之间的任何行对于特定列具有true,我们假设结果为true. 解决方案 使用聚合函数SELECT bool_or(column_a) AS column_a , bool_or(column_b) AS column_b , bool_or(column_c) AS column_c FROM tbl WHERE id IN (1,2); 手册: true如果至
0 2024-01-19
编程技术问答社区
AS3/JavaScript的if语句用逗号代替&&。
这在ActionScript 3和JavaScript中运行.为什么?我知道&&和||的工作方式,但是列表吗?这是特定于AS3吗?这是其他语言吗?我是呼吸php/as2程序员的嘴.还是每个人都已经知道这一点,我是不正确阅读文档的工具? as3 if (true, true, true) { trace("true?") } //result - "true?" traced javascript if (true, true, true) { alert("true?"); } //result - "true?" alert message popped up if (false, false, false) { alert("true?"); } else { alert("false"); } //result - "false" alert message popped up if(true, false, false)
0 2024-01-09
编程技术问答社区
微软喜欢假的价值更好?
我正在阅读乔恩·斯基特(Jon Skeet)书. (#4) ,但一件事(其他)引起了我的注意: 主题:bool? 他在表中写道:( x,y是布尔?) X | Y | X & Y --------------------------- true null null 好吧...所以零是决定的人. 这里的布尔操作数松动. X | Y | X & Y --------------------------- false null false 为什么? 为什么在上一个示例中考虑到这里的布尔操作数正在考虑到结果……? 看来是真的与错误在不同的地方有朋友.... :) 解决方案 发音 null as 未知. true & unknown => unknown false & unknown => false because the
0 2024-01-07
编程技术问答社区
如何将 "0 "和 "1 "转换为假和真
我有一种通过ODBC连接到数据库的方法.我的存储过程 呼叫具有一个从数据库端的返回值,为" char".现在我要抓住 该返回值作为字符串,并在简单的if语句中使用.我真的不喜欢这个主意 当只有两个值可以从数据库回来时,比较这样的字符串. . OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn); fetchCommand.CommandType = CommandType.StoredProcedure; fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter); fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1) .Direction = ParameterDirection.Output; fetchCommand.ExecuteN
4 2024-01-03
编程技术问答社区
如果第一个表达式是假的,编译器是否继续评估一个所有表达式都必须是真的?
我确定这个问题以前可能已经回答了,所以我深表歉意,但是我找不到适当的搜索词来找到答案. 给定以下代码示例,db.GetRecords().Any()是否执行? string s = "Z"; bool x = s.IndexOfAny(new[] { 'A', 'B' }) > 0 && db.GetRecords().Any(); 解决方案 否. &&和||均通过短路评估.这意味着a && b如果a为false,则返回false,并且a || b如果a为true,则返回true,并且在这两种情况下都不会评估b. 由于某种原因您不需要短路评估,您可以使用位运算符&和|. . 其他解决方案 否. &&操作员的短路(这意味着它在表达式的任何部分评估为false之后停止评估表达式). ||运算符也短路,但在表达式的任何部分评估为true之后都停止评估. 其他解决方案 否,C#使用短路和.因此答案是 no . 如果您需要同时评估
6 2024-01-03
编程技术问答社区
我应该总是使用AndAlso和OrElse运算符吗?
我不想使用 解决方案 来自 msdn : 短路权衡 短路可以通过不评估无法改变逻辑操作结果的表达来提高性能.但是,如果该表达式执行其他动作,则短路会跳过这些动作.例如,如果表达式包括对函数过程的调用,则如果表达式短路,则不会调用该过程,并且该函数中包含的任何其他代码均未运行.如果您的程序逻辑取决于任何其他代码,则可能应避免使用短路操作员. 其他解决方案 是否有我不想使用Andalso操作员而不是操作员的情况? 肯定:如果要确保评估表达式的两个 .例如,如果双方都是由于具有副作用的其他操作而返回布尔值的方法调用. 但通常,每当您在C/C ++/C#中使用&&/||时,请使用AndAlso/OrElse,当然是绝大多数时间. 其他解决方案 它们在VB.NET中是完全不同的功能,并且都具有其用例(尽管最常见的用途都将起作用) AndAlso和OrElse是有条件的操作员,他们返回真实或错误的布尔值,并且仅评估他们需要的内容,直到达到无法更改的
0 2024-01-03
编程技术问答社区
Z3布尔表达简化
试图简化这种布尔表达. (not (and (or (not e) (not f) (not h)) (or (not f) (not h) d) (or (not e) (not h) c) (or (not h) d c) (or (not e) (not f) (not g) a) (or (not f) d (not g) a) (or (not e) (not f) a i) (or (not f) d a i) (or (not e) c (not g) a) (or d c (not g) a) (or (not e) c a i) (or d c a i) (or (not e) (not f) a b) (o
8 2023-12-26
编程技术问答社区
为什么Z3对微小的搜索空间来说很慢?
我正在尝试制作一个Z3程序(在Python中),该程序生成了执行某些任务的布尔电路(例如,添加两个n位数字),但是性能在整个过程中进行了蛮力搜索的程度很糟糕解决方案空间会更快.这是我第一次使用Z3,所以我可以做一些会影响我的性能的事情,但是我的代码似乎还不错. 从我的代码这里:: from z3 import * BITLEN = 1 # Number of bits in input STEPS = 1 # How many steps to take (e.g. time) WIDTH = 2 # How many operations/values can be stored in parallel, has to be at least BITLEN * #inputs # Input variables x = BitVec('x', BITLEN) y = BitVec('y', BITLEN) # Define operations used op_lis
0 2023-12-25
编程技术问答社区
在API调用中的YouTube搜索操作符? booelan操作符AND、OR和NOT
我很难发现操作员和YouTube API研究的运作方式. 在youtube上.搜索我找到了对操作员的逻辑解释的方法setQ,而不是为操作员及其. 主要想法是进行一个搜索,该搜索完全包含两个参数,我可以使用或逻辑. 示例:我想要2个"鱼"和"海"应该是研究的元数据的一部分. 我已经对前端呼叫进行了分析,并具有此形式: 鱼+海洋,但是如果我尝试在爪哇实施它,看起来它的功能无法正常,因为我还有其他结果. PS:我已经通过相关性订购了所有结果(通过将"相关性"值设置为YouTube本身使用的逻辑) 由于这个原因,我在YouTube网站和我的本地应用程序中都具有相同的结果. 解决方案 我使用Google Data API Explorer测试了一些请求,我发现" and "一词(uppercase)它会给您带来一些不同的结果: 例如,以下请求是使用查询" The Ring" (不带双引号)的搜索视频 - 它将带来美国地区的前10个搜索结果: https://w
8 2023-12-25
编程技术问答社区
如何使用数据模板处理多个标签的启用属性?
我有一个带有两个选项卡的窗口,该窗口具有两个不同的用户控件.为了启用/禁用导航到第二个选项卡,我从IPageViewModel接口中实现了IsEnabled属性. 当通过Messenger Service从CustomerDetailsViewModel中获得A SelectedCustomer时,IseNabled Boolean属性设置为True. 到目前为止,此方法可以正常工作,因为当我在第一个视图中从数据网格中选择客户时,第二个选项卡将启用.但是问题是当我尝试选择第一个选项卡以返回到初始视图时,它是 disabled . 这是特定导航问题. 我不确定为什么在使用Messenger设置IseNabled属性为true时,将启用两个选项卡. 有人在这里对此问题有任何建议吗? 在CustomerDetailsViewModel中,我通过Messenger发送了SelectedCustomer: private CustomerModel s
2 2023-12-14
编程技术问答社区
测试同时进行多种条件的测试(C语言)
我必须创建一个菜单,如果输入不有效.它应该继续要求有效的输入.我已经在下面写(在C) #include int main() { int input = 0; printf("What would you like to do? \n 1 (Subtraction) \n 2 (Comparison) \n 3 (Odd/Even) \n 4 (Exit) \n "); scanf_s("%d", &input); while (input != 1 || input != 2 || input != 3|| input != 4) { printf("Please enter a valid option \n"); scanf_s("%d", &input); } // At this point, I think it should keep testing variabl
8 2023-12-03
编程技术问答社区
什么是 "自动铸造的布尔"?
在以下回答以前的问题有人提到了"自动铸造布尔" 我猜null有一个虚假的自动铸造布尔.它是什么,使它看起来像什么代码? 解决方案 短语"自动铸造布尔"是一个糟糕的短语,有人用手使用.我相信他们的意思是内部 ToBoolean 操作 特别注释是 if语句在表达式上调用ToBoolean./p> 我不知道围绕V8源代码的方式,但这是在V8 repo 上搜索ToBoolean. 参考V8是Chrome使用的JavaScript实现,并以C ++ 编写
2 2023-12-01
编程技术问答社区
Verilog ! 和 ~ 之间的区别是什么?
因此,最终使我持续了几天的错误是代码的一部分,应该评估为false评估为true.我的初始代码类似: if(~x && ~y) begin //do stuff end 即.如果x不是一个,而不是一个,那就做一些事情.踏上调试器,我意识到,即使X是1,IF-Statement中的表达仍然导致了真实,并且执行了后续代码. 但是,当我将语句更改为: 时 if(x == 0 && y == 0) begin //do stuff end 也尝试了: if(!x && !y) begin //do stuff end 未评估IF-Stategent中的代码是预期的行为.我知道〜是一个比较否定的!逻辑上的否定,但不应该(〜x && 〜y)和(!x &&!y)评估同一件事吗?恐怕代码库太大了,所以我不能在这里粘贴它,但这是我按照预期进行代码进行工作的唯一更改.谢谢. 回应以下评论之一,我创建了一个测试案例来测试此行为: `timescale 1
8 2023-11-17
编程技术问答社区
与其打出一堆 "Or "语句,我如何在这段代码中实现一个函数?
Sub test() Dim DataRange As Range Dim LastRow As Integer Dim i As Integer Dim SplitVal() As String Dim OutputOffset As Long OutputOffset = 0 LastRow = Cells(Rows.Count, "J").End(xlUp).Row For i = 2 To LastRow If InStr(1, Cells(i, 10).Value, "Test1", vbTextCompare) 0 Or InStr(1, Cells(i, 10).Value, "Test2", vbTextCompare) 0 Or InStr(1, Cells(i, 10).Value, "Test3", vbTextCompare) 0 Then SplitVal = Split(Cells(
8 2023-11-15
编程技术问答社区
在VB6中,逻辑函数IMP和EQV的作用是什么?有没有人发现它们在现实中的用途?
And a href =" https://msdn.microsoft.com/en-us/library/aa242850(v=vs.60).aspx" rel =" noreferrer"> Or , Xor 和 Not 我明白.我没有得到的是 Imp Imp 和 Eqv .他们的意思是什么?他们怎么进入那里?他们有什么真正用的吗? 解决方案 imp是"材料含义"" a表示b"或"如果a则b",这等同于不或b. eqv是"等价"或"仅在且仅当"的"等效性",因此eqv b与(a imp b)和(b imp a)相同. . 他们到了那里,因为有人想完整.他们可以缩短一些逻辑表达式,但是您总是可以不用和,或者与Xor单独表达同一件事. 其他解决方案 这是所有操作员的真实表,无论是布尔值还是位于钻石.使用它们的最佳时间是绘制逻辑并意识到您的功能需要两个输入,并且与这些运算符的输出相同:) -----------------------------------
8 2023-11-15
编程技术问答社区