我开始学习Prolog,并首先了解了继承符号.
这就是我在Prolog中发现编写Peano公理的地方.
参见PDF的第12页:
sum(0, M, M).
sum(s(N), M, s(K)) :-
sum(N,M,K).
prod(0,M,0).
prod(s(N), M, P) :-
prod(N,M,K),
sum(K,M,P).
Run Code Online (Sandbox Code Playgroud)
我把乘法规则放到了Prolog中.然后我做查询:
?- prod(X,Y,s(s(s(s(s(s(0))))))).
Run Code Online (Sandbox Code Playgroud)
这意味着基本上找到6的因子.
结果如下.
X = s(0),
Y = s(s(s(s(s(s(0)))))) ? ;
X = s(s(0)),
Y = s(s(s(0))) ? ;
X = s(s(s(0))),
Y = s(s(0)) ? ;
infinite loop
Run Code Online (Sandbox Code Playgroud)
这个结果有两个问题:
所以...我的问题是:
我在无限循环中阅读了另一个答案.但我很感激有人根据这个场景做出回答.这对我很有帮助.
prolog infinite-loop successor-arithmetics non-termination failure-slice
我正在组织一些非常基本的对称加密/解密代码以供将来使用.我能够成功加密和解密...只有一个小问题.
这是我的代码,它从流中读入并解密到另一个流:
public void Encrypt(Stream input, Stream output) {
byte[] key = Encoding.UTF8.GetBytes(_pw);
byte[] iv = Encoding.UTF8.GetBytes(GenerateInitVector());
RijndaelManaged rm = new RijndaelManaged();
CryptoStream cs = new CryptoStream(
output,
rm.CreateEncryptor(key, iv),
CryptoStreamMode.Write);
int data;
while ((data = input.ReadByte()) != -1)
cs.WriteByte((byte) data);
cs.Close();
}
public void Decrypt(Stream input, Stream output) {
byte[] key = Encoding.UTF8.GetBytes(_pw);
byte[] iv = Encoding.UTF8.GetBytes(GenerateInitVector());
RijndaelManaged rm = new RijndaelManaged();
CryptoStream cs = new CryptoStream(
input,
rm.CreateDecryptor(key, iv),
CryptoStreamMode.Read);
int data;
while ((data = cs.ReadByte()) != -1) …Run Code Online (Sandbox Code Playgroud) 我正在尝试回答一些对/错问题。当我用 true 回答其中许多问题时,我感到很担心...请假设所有图表都是无向的并且没有不同的权重。负权重应该没问题。
Qa) 如果 G 具有一个具有唯一最重边 e 的环,则 e 不能是任何 MST 的一部分。
我的回答是真的。例如,我们有一个包含节点 A、B、C、D、E 的图。
AB = 1
BC = 2
BD = 3
CD = 100
DE = 4
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,BCD是一个循环。我的观点是,既然是一个循环,我们总是可以通过走其他路线来避免独特的最重边缘CD。因此这是真的。我的论点合理吗(足够)吗?
Qb) Dijkstra 算法计算出的最短路径树必然是 MST。
我的回答是对的,但我的直觉告诉我有些不对劲。嗯...Disjkstra 和 Prim 都是贪婪算法。他们每次都追求最轻的边缘。是否存在最短路径树不是最小生成树的情况?我实际上很难理解这两个人之间的区别。
Qc) Prim 的算法适用于负加权边。
我的回答是真的。因为这就是 wiki 所说的... :p 该算法是为了在所有边中找到成本最低的边。所以负加权边缘应该不重要,不是吗?但是负加权循环又如何呢?
Qd) 如果 G 具有一个具有唯一最轻边 e 的循环,则 e 必须是每个 MST 的一部分。
我的回答是真的。我们必须访问 MST 中的所有节点。例如,在长度为 3 的循环中,我们总是可以用 2 步遍历该循环中的所有节点。如果有一个独特的最轻边缘,我们肯定会在 MST 中选择它。
我的主张合理吗?也许他们还不够?那么有什么建议吗?