我刚刚花了大约一周的时间来搞清楚如何从C#执行C++代码作为我日常工作的一部分.我们花了很长时间才弄明白,但最终的解决方案相当简单.
现在我很好奇......从C#调用Haskell会有多难?(注意:这是从 C#调用Haskell ,而不是相反.所以主要的可执行文件是C#.)
如果它真的很难,我不会打扰.但如果它相当容易,我可能不得不玩它...
基本上,我们编写了一些C++代码.在Windows上,它被编译成一个DLL,在Linux上它被编译成一个共享对象(*.so).然后在C#端你做一个DllImport并写一些手动内存管理代码,如果你试图通过任何非常重要的事情.(例如,数组,字符串等)
我知道GHC应该支持在两个平台上构建共享库,但我不确定技术细节.导出内容的语法是什么,调用者是否必须先做一些特殊的事情来初始化DLL?
具体来说:假设存在一个函数foobar :: FilePath -> IO Int32.有人可以把一个小草图放在一起显示:
foobar.我不太担心C#端的实际语法; 我想我或多或少地对此感到困惑.
PS我做过简要介绍hs-dotnet,但这似乎是Windows特定的.(即,不适用于Mono,因此无法在Linux上运行.)
可以从n个不同的元素构造多少个二叉搜索树?我们怎样才能找到一个经过数学验证的公式呢?
示例: 如果我们有3个不同的元素,比如说1,2,3,则有5个二叉搜索树.

我想用递推方程找出程序的时间复杂度.那是 ..
int f(int x)
{
if(x<1) return 1;
else return f(x-1)+g(x);
}
int g(int x)
{
if(x<2) return 1;
else return f(x-1)+g(x/2);
}
Run Code Online (Sandbox Code Playgroud)
我写了它的递推方程并尝试解决它,但它继续变得复杂
T(n) =T(n-1)+g(n)+c
=T(n-2)+g(n-1)+g(n)+c+c
=T(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c
=T(n-4)+g(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c+c
……………………….
……………………..
Kth time …..
=kc+g(n)+g(n-1)+g(n-3)+g(n-4).. .. . … +T(n-k)
Let at kth time input become 1
Then n-k=1
K=n-1
Now i end up with this..
T(n)= (n-1)c+g(n)+g(n-1)+g(n-2)+g(n-3)+….. .. g(1)
Run Code Online (Sandbox Code Playgroud)
我无法进一步解决它.如果我们计算这个程序中函数调用的数量,可以很容易地看出时间复杂度是指数级的,但我想用重复证明它.怎么做到呢 ?

在Anwer 1中的解释,看起来正确,我做过类似的工作.
这段代码中最困难的任务是写出它的递归方程.我已经绘制了另一个图,我确定了一些模式,我认为我们可以从这个图中得到一些帮助,可能是可能的递归方程.


And I came up with this equation , not sure if it is right ??? …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的程序:
#include <stdio.h>
int main()
{
int s1;
int s2;
int s3;
int *p1, *p2, *p3;
p1 = &s1;
p2 = &s2;
p3 = &s3;
printf("%d\n%d\n%d", p1, p2, p3);
}
Run Code Online (Sandbox Code Playgroud)
每当我运行这个程序时,它会打印指针的内存地址p1,p2而p3有趣的是这些值有不同之处12.我想知道这背后的原因.为什么地址不同12?
注意:每次执行程序时都会发生这种情况.
输出:

我在许多类型的变量中测试了相同的程序,我得到的结果是......
当变量是char类型时.

当变量是长类型时

当我声明int数组时,每个数组的大小为1.

当第二个声明的数组的大小为2时,它会获得额外的4字节偏移量.

这是一个简单的C程序:
int f(int n) {
if(n==0 || n==1) {
return n;
} else {
return 2 * f(n - 1) + 3 * f(n - 2);
}
}
Run Code Online (Sandbox Code Playgroud)
该程序具有指数时间复杂度.您可以在此函数调用图中看到f(5):

我想表明函数只使用递归方程具有指数复杂性,而不是通过绘制图表和计算函数调用的数量.
我想出的复发关系是
T(n)= T(n-1)+ T(n-2)+ c
扩展给出
T(n)= 2T(n-2)+ T(n-3)+ 2c
但是,我不知道如何进一步解决这个问题.我该如何解决这种递归关系?
我正试图解决一个客观类型的问题,来检查.我实际上不知道正确的答案,也不知道如何得到它,需要你的帮助.谢谢 .
问题: 在某个系统中,主存储器访问时间为100 ns.缓存比主内存快10倍,并使用写入协议.如果读取请求的命中率是0.92,并且CPU生成的内存请求的85%用于读取,则剩余的用于写入; 然后考虑读写请求的平均时间是
a)14.62ns
b)348.47ns
c)29.62ns
d)296.2ns
我的工作 ::::
那么,内存访问时间= 100ns
缓存访问时间将= 10 ns(快10倍)
In order to find avg time we have a formula
Tavg = hc+(1-h)M
where h = hit rate
(1-h) = miss rate
c = time to access information from cache
M = miss penalty (time to access main memory)
Run Code Online (Sandbox Code Playgroud)
直写操作:缓存位置和主存储器位置同时更新.
假设CPU生成的85%请求是读请求,15%是写请求.
Tavg = 0.85(avg time for read request)+ 0.15(avg time for write request)
= 0.85(0.92*10+0.08*100)+0.15(avg time for write request)
Run Code Online (Sandbox Code Playgroud)
//*0.92是读取请求的命中率,但是没有给出写入请求的命中率?
如果我假设写请求的命中率与读请求的命中率相同,那么,
= 0.85(0.92*10+0.08*100)+0.15(0.92*(10+100)+0.08*100) …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个 MySQL 查询,该查询将获取当前日期并将其与表中的 2 个日期字段进行比较,并返回满足该查询的行。
这是我的列 1- [from_date],其类型是日期 2- [to_date] 也包含日期类型
该查询假设返回这些日期之间的行。
这是我的查询
mysql_query("SELECT * FROM location WHERE from_date >= DATE() AND to_date <= DATE()")
Run Code Online (Sandbox Code Playgroud)
我的问题是它不返回任何东西。我应该将列类型切换为 DATETIME 吗?
提前致谢。
假设源代码文件名是test.cpp.编译时,它会生成test.exe文件.当我执行它时,它应该识别它的文件名test.exe并打印它.
我可以使用以下代码获取当前目录中存在的所有文件和目录的列表:
DIR * directory;
struct dirent * direct;
direct = readdir(directory);
Run Code Online (Sandbox Code Playgroud)
但是,如何识别相关的文件名,在这种情况下是哪个"test.exe"?
我必须永久存储上传的文件版本和以前的文件名和版本,而且,我需要更新和检索该信息,但我没有为此应用程序使用任何数据库.是否可以将数据保存在Web.Config文件中并能够更新?
algorithm ×3
c ×3
math ×2
memory ×2
asp.net ×1
big-o ×1
binary-tree ×1
c# ×1
c++ ×1
cpu-usage ×1
ffi ×1
file-upload ×1
haskell ×1
mysql ×1
php ×1
pointers ×1
proof ×1
recurrence ×1
recursion ×1
visual-c++ ×1