小编Ame*_*men的帖子

如何更改只读TextBox的文本颜色?

我正在用c#编写一本字典,我正在使用一个文本框来显示定义.显然,我需要将ReadOnly属性设置为true,但是当我这样做时,我无法更改文本的颜色.但是更改字体可以正常工作.我该怎么办?

我正在使用此代码,并且当ReadOnly属性为false时设置颜色完全正常,但是当它为真时不会更改:

    private void button5_Click(object sender, EventArgs e)
    {
        FontDialog fd = new FontDialog();
        fd.ShowColor = true;
        if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            textBox3.Font = fd.Font;
            textBox3.ForeColor = fd.Color;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c#

14
推荐指数
2
解决办法
2万
查看次数

在pydub中播放音频

将其导入我的代码后如何播放wav音频?

from pydub import AudioSegment  
song = AudioSegment.from_wav("explosion.wav")
Run Code Online (Sandbox Code Playgroud)

python python-3.x pydub

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

动态0/1背包总笑话?

我已经获得了证明,会抹黑关于0/1背包问题的一个普遍持有的想法,我真的有一个很难说服我自己我是对的,因为我无法找到任何东西任何地方支持我的要求,所以我将首先陈述我的主张,然后证明他们,我将感谢任何人试图进一步证实我的主张或取消他们.任何合作都表示赞赏.

断言:

  1. 用于解决背包问题的bnb(分支和边界)算法的大小与K(背包的容量)无关.
  2. bnb树完整空间的大小始终为O(NK),N为项目数而不是 O(2 ^ N)
  3. bnb算法总是比时间和空间上的标准动态编程方法更好.

预先假设:bnb算法倾向于无效节点(如果剩余容量小于当前项的权重,我们不会扩展它.此外,bnb算法以深度优先的方式完成.

邋proof证明:

这是解决背包问题的递归公式:

值(i,k)= max(值(i-1,k),值(n-1,k-weight(i))+值(i)

但是如果k <weight(i):Value(i,k)= Value(i-1,k)

现在想象这个例子:

K = 9
N = 3   
V W:   
5 4   
6 5   
3 2
Run Code Online (Sandbox Code Playgroud)

现在这里是针对此问题的动态解决方案和表:

在此输入图像描述

现在想象一下,不管它是否是一个好主意,我们都希望通过memoization而不是表格使用递归公式,使用类似地图/字典或简单数组来存储访问过的单元格.为了使用memoization解决这个问题,我们应该解决所表示的单元格:

在此输入图像描述

现在这就像我们使用bnb方法获得的树一样:

在此输入图像描述

而现在的邋proof证明:

  1. Memoization和bnb树具有相同数量的节点
  2. 记忆节点取决于表大小
  3. 表大小取决于N和K.
  4. 因此 bnb不依赖于K.
  5. 记忆空间受NK即O(NK)的限制
  6. 因此, bnb树完整空间(或者如果我们以广度优先的方式执行bnb的空间)总是O(NK)而不是O(N ^ 2)因为整个树不会被构造而且它将是精确的喜欢妈妈.
  7. Memoization比标准动态编程具有更好的空间.
  8. bnb比动态编程有更好的空间(即使首先在广度上完成)
  9. 没有松弛的简单bnb(只是消除不可行节点)将比memoization有更好的时间(memoization必须在查找表中搜索,即使查找可忽略不计,它们仍然是相同的.)
  10. 如果我们忽略了memoization的查找搜索,那么它比动态更好.
  11. 因此, bnb算法在时间和空间上总是优于动态.

问题:

如果无论如何我的证据都是正确的,那么会出现一些有趣的问题:

  1. 为什么要烦扰动态编程呢?根据我的经验,你可以在dp背包中做的最好的事情就是拥有最后两列你可以将它进一步改进到一列,如果你从下到上填充它,它将有O(K)空间但仍然不能(如果上述断言是正确的)击败bnb方法.
  2. 如果我们将它与松弛修剪(关于时间)相结合,我们还能说bnb更好吗?

ps:很抱歉很长的帖子!

编辑:

由于两个答案都集中在记忆化,我只是想澄清,我没有关注这个在所有!我只是用memoization作为一种技术来证明我的断言.我的主要关注点是分支定界技术与动态规划,这里是另一个问题的完整例子,由bnb + relax解决(来源:Coursera - 离散优化):

在此输入图像描述

algorithm tree knapsack-problem dynamic-programming branch-and-bound

7
推荐指数
3
解决办法
955
查看次数

如果声明?并且:

我听说过一种说法如果哪个使用?:用C
我不知道如何使用它,我无法找到任何关于它.我需要使用它来缩短我的代码任何帮助将不胜感激.

c ternary-operator

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

QTableWidget当前选择更改信号

当前选择发生变化时,QTableWidget的信号是什么?如何为其分配一个插槽?

python pyqt pyqt4 python-3.x

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

加泰罗尼亚数字,递归函数时间复杂度

以下函数产生加泰罗尼亚语数字中的第n个数字。该函数的确切时间复杂度函数是什么?或者我自己如何找到它?

int catalan(int n)
{
    if (n==0 || n==1)
        return 1;

    int sum = 0;
    for(int i=1;i<n;i++)
        sum += catalan(i)*catalan(n-i);
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

注意:我知道这是计算加泰罗尼亚数的最坏方法。

c++ algorithm time-complexity catalan

4
推荐指数
2
解决办法
3532
查看次数

访问子数组并使用Java计算数组中的元素

我有2个问题阵列java任何帮助将不胜感激.

  1. 有没有办法进入一个子阵列(像这样的python: array[1:5])

  2. 我想知道确实java有一个函数来计算array或不计算特定元素.

我不想使用for循环.

java arrays

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

递归 - 在体内声明变量或将其用作参数?

这个递归函数有什么区别:

int foo (int n,int sum)  
{
    if (n==0)  
        return sum;
    int temp;
    cin>>temp;
    return foo(n-1,sum+temp);
}

int main()
{
    ...
    ...
    foo(n,0);
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

int foo (int n,int sum, int temp)  
{
    if (n==0)  
        return sum;
    cin>>temp;
    return foo(n-1,sum+temp,temp);
}

int main()
{
    ...
    int temp;
    foo(n,0,temp);
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

哪一个在空间复杂性方面更有效?他们有什么不同吗?我们可以说,当递归调用复制参数时,声明函数中的变量与将其用作参数相同吗?

c++ recursion

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

哈希有序排列的最佳方法[1,9]

我正在尝试实现一种方法来保持8个谜题的访问状态不再生成.
我最初的方法是将每个访问过的模式保存在列表中,并在每次算法想要生成子项时进行线性检查.
现在我希望O(1)通过列表访问及时完成此操作.8拼图中的每个模式是1到9之间的数字的有序排列(9是空白块),例如125346987是:

1 2 5
3 4 6
_ 8 7

这种可能排列的数量大约为363,000(9!).将这些数字散列到该大小列表的索引的最佳方法是什么?

python algorithm hash permutation sliding-tile-puzzle

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

错误使用指针或错误?

我遇到了一些相当奇怪的东西,我找不到任何合理的东西.我写了一个像这样的函数返回一个像这样的int指针:

int* arr()  
{  
  int array[3]={1,2,3};  
  return array;  
}
Run Code Online (Sandbox Code Playgroud)

现在在main中,我声明了一个像k这样的int指针:

int*k=arr();
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但这是奇怪的事情,我只能使用其中一个块,k [0]或k [1]或k [3],它会打印正确的相应数字,但是当想要使用它时a这样只有第一个才能正确打印:

for(int i=0;i<3;i++)
{
  cout<<k[i]<<endl;
}
Run Code Online (Sandbox Code Playgroud)

对于k [0],打印值是正确的,但对于其他人来说这是奇怪的.我想知道如果我没有使用指针,为什么我可以访问每个块?

c++ pointers

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

我该如何实现java EOF

我从头开始学习java,我试图在编程站点接受一个问题,它非常基本,我需要做的就是打印一个+ b直到文件结尾,我到处寻找EOF和所有这些都实现了一个文件的结尾,假设一个真实的文件,但在问题我写的代码,我不应该使用实际的文件.
我在C++中使用此代码:

#include<iostream>;
using namespace std;
int main()
{
 int a,b;
 while(cin>>a)
  {
   cin>>b;
   cout<<a+b<<endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我有点把它转换成java:

package a.b;
import java.util.*;  

public class AB {  

static Scanner in=new Scanner(System.in);  

public static void main(String[] args) {
    int a,b;
    a=in.nextInt();
    while(in.nextInt()!=null)
    {
        b=in.nextInt();
        System.out.println(a+b);
        a=in.nextInt();
    }

 }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何为它实现EOF.任何帮助,将不胜感激.

c++ java

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

在PyQt中将标签字体大小与布局同步

更改标签的字体大小以匹配通过信号/插槽包含的布局大小的具体方法是什么?

python pyqt pyqt4 python-3.x

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