一些背景:我正在编写或多或少的强力搜索算法来解决我遇到的问题.为了做到这一点,我需要生成并评估所有可能性,以找出哪个是最好的.由于评估实际上需要一些时间,我宁愿尽可能少地生成完全覆盖我的搜索空间的解决方案.此外,我可以做的更多元素越多越好.对于任何数字K,通常有K!对于高于~10的数字,排列和生成它们都很难.
真正的问题:搜索空间应包含两个元素的所有排列(N次el1和M乘以el2,其中K = M + N),具有以下限制:
如果我能够做到这一点,可能性的数量将大大减少.由于理想情况下K很大,因此首先生成所有排列然后根据这些标准过滤它们是不可行的.我已经完成了第一个限制(见下文),它将Matlab的正常排列函数(perms)的数量从2 ^ K减少到K!/ N!M !,这是一个巨大的胜利.第二个限制只会将可能性的数量减少一半(在最好的情况下),但我认为第三个也应该能够真正减少可能性的数量.
如果有人知道怎么做,最好还有如何计算会有多少种可能性,这对我有很大的帮助!我更喜欢解释,但代码也很好(我可以读C语言,Java(脚本),Python,Ruby,Lisp/Scheme).
对于感兴趣的:这是迄今为止我只获得唯一排列的算法:
function genPossibilities(n, m, e1, e2)
if n == 0
return array of m e2's
else
possibilities = genPossibilities(n-1, m, e1, e2)
for every possibility:
gain = number of new possibilities we'll get for this smaller possibility*
for i in max(0,(m+n-gain))
if possibility(i) is not e1
add possiblity with e1 inserted in position i
return new possibilities
Run Code Online (Sandbox Code Playgroud)
我正在写一个小宝石,我要定义一个DSL样方法,几乎是一样的desc,并task在方法耙.
Rake将它们定义为Rake::DSL模块中的私有方法然后
self.extend Rake::DSL
Run Code Online (Sandbox Code Playgroud)
将模块混合到主对象中?(如果我错的话,我是新手并继续笑)
这样做有什么好处?是因为将这些方法设为私有可以阻止任何其他对象使用它们(也就是说,为了防止这样的事情some_obj.desc)?
如果我定义方法怎么办? Kernel
module Kernel
private
include Rake::DSL
end
Run Code Online (Sandbox Code Playgroud)
有什么区别吗?
完全披露,我是学生,这是一项任务.我已经工作了一个多星期几乎不停(除了以前花的时间),我无法弄清楚我做错了什么.我的服务器一直挂在epoll_wait后,只有"少数" RECVS完成("少数",因为我期待几个GB的数据和我得到的只有几十MB).我不认为我的客户端如何工作有任何问题,因为它与我的选择和多线程服务器一起工作得很好.请快速浏览一下,让我知道是否有任何事情因为我的问题导致你跳出来.
客户端/服务器的基本思想是用连接(10k +)轰炸服务器并多次传输给定数量的数据.这个epoll服务器在2000年遇到了麻烦,当时我的多线程服务器只处理了10k的目标.
我不是要求你为我做任务(我差不多完成了)我只是需要帮助弄清楚我在这里做错了什么.在此先感谢您提供的任何帮助:)
1 #include "common.h"
2 #include <sys/epoll.h>
3
4 uint16_t ready[MAX_CONNS];
5 uint16_t next;
6 pthread_mutex_t mutex;
7
8 void *worker_thread(void *param) {
9 int my_sock, pos;
10 struct conn_params *conn_ps = (struct conn_params *)param;
11
12 while (1) {
13 pthread_mutex_lock(&mutex);
14
15 while (1) {
16 if (next == MAX_CONNS) {
17 printf("balls\n");
18 next = 4;
19 }
20
21 if (ready[next] != 0) {
22 pos = next;
23 my_sock = ready[pos]; …Run Code Online (Sandbox Code Playgroud) 长度为n的k-ary项链是长度为n的有序列表,其项目是从长度为k的字母表中绘制的,这是按字典顺序排列的第一个列表,在所有列表中共享旋转下的排序.
示例:(1 2 3)和(1 3 2)是字母{1 2 3}中长度为3的项链.
更多信息:http: //en.wikipedia.org/wiki/Necklace_(bizbinicsics)
我想在Scheme(或你选择的Lisp)中生成这些.我找到了一些论文......
野人 - 一种生成项目的新算法
Sawada - 在恒定摊销时间生成手镯
Sawada - 生成带有禁止的子串的项链
......但是它们中的代码对我来说是不透明的.主要是因为他们似乎没有传递字母或所需的长度(n).我正在寻找的方案程序是形式(项链n'(ab c ...)).
通过首先生成k ^ n个列表然后过滤掉旋转,我可以很容易地生成这些.但它的内存效率非常低......
谢谢!
我正在尝试从命令行工具测试输出.如何使用rspec"伪造"命令行调用?执行以下操作不起作用:
it "should call the command line and return 'text'" do
@p = Pig.new
@p.should_receive(:run).with('my_command_line_tool_call').and_return('result text')
end
Run Code Online (Sandbox Code Playgroud)
如何创建该存根?
如何以编程方式确定运行Linux内核的嵌入式设备中的USB端口速度?
我正在研究一个C程序.有一个函数需要两个指针参数,调用它cmp().cmp()出于说明的原因,我在这里提供了一个简化的替身:
int cmp(struct foo *a, struct foo *b)
{
return a->bar == b->bar;
}
Run Code Online (Sandbox Code Playgroud)
我想制作一个NULL-check宏,如下所示:
#define SAFE_CMP(a,b) (((a) != NULL && (b) != NULL) ? cmp((a),(b)) : 0)
Run Code Online (Sandbox Code Playgroud)
我觉得这很好.但是,在使用-Wall以及将警告视为错误的compliation开关进行编译时,以下代码很麻烦:
int baz(struct foo *a)
{
struct foo b;
/* ... */
return SAFE_CMP(a, &b);
}
Run Code Online (Sandbox Code Playgroud)
因为gcc警告"b的地址永远不会为NULL".
有没有办法解决这种情况?具有多种辅助宏象SAFE_CMP_1(safe_arg,unsafe_arg)和SAFE_CMP_2(unsafe_arg,safe_arg)等是我想要的最后一件事.我想让一个助手宏适用于所有情况.
ISO/IEC 2022定义了C0和C1控制代码.在C0组之间是熟悉的代码0x00和0x1f在ASCII,ISO-8859-1和UTF-8(例如ESC,CR,LF).
一些VT100终端仿真器(例如screen(1),PuTTY)也支持C1集.这些值之间0x80和0x9f(因此,例如,0x84向下移动光标的线).
我正在显示用户提供的输入.我不希望用户输入能够改变终端状态(例如移动光标).我目前正在过滤出C0集中的字符代码; 但是我想有条件地过滤出C1集,如果终端将它们解释为控制码.
有没有办法从数据库中获取此信息termcap?
我一直在试图弄清楚如何制作我认为是一个简单的内核来获取2d矩阵中的值的平均值,但是我有一些问题让我的思维过程直接进行.
根据我的deviceQuery输出,我的GPU有16MP,32cores/mp,块最大为1024x1024x64,我有一个最大线程/块= 1024.
所以,我正在处理一些大型图像.也许5000px x 3500px或类似的东西.我的一个内核是在图像中的所有像素上取平均值.
现有代码将图像存储为2D数组[rows] [cols].因此,在C中,内核看起来像你期望的那样,循环遍历行,并且循环遍历cols,计算在中间.
那么如何在CUDA中设置此代码的维度计算部分?我已经查看了SDK中的缩减代码,但这是针对单维数组的.它没有提到如何设置块数和线程数,当你有soemthing 2D时.
我想我实际上需要像这样设置它,这就是我希望有人能够帮助你的地方:
num_threads=1024;
blocksX = num_cols/sqrt(num_threads);
blocksY = num_rows/sqrt(num_threads);
num_blocks = (num_rows*num_cols)/(blocksX*blocksY);
dim3 dimBlock(blocksX, blocksY, 1);
dim3 dimGrid(num_blocks, 1, 1);
Run Code Online (Sandbox Code Playgroud)
这似乎对设置有意义吗?
然后在内核中,要处理特定的行或列,我必须使用
rowidx =(blockIdx.x*blockDim.x)+ threadId.x colidx =(blockIdx.y*blockDim.y)+ threadId.y
至少我认为这对于获得行和列是有效的.
那么我如何访问内核中的特定行r和列c?在cuda编程指南中,我找到了以下代码:
// Host code int width = 64, height = 64;
float* devPtr; size_t pitch;
cudaMallocPitch(&devPtr, &pitch, width * sizeof(float), height);
MyKernel<<<100, 512>>>(devPtr, pitch, width, height);
// Device code __global__ void MyKernel(float* devPtr, size_t pitch, int width, int height)
{
for (int …Run Code Online (Sandbox Code Playgroud) 到目前为止,我已成功使用SSL,但遇到了令人困惑的障碍.我生成一个RSA密钥对,之前使用PEM_write_bio_RSAPrivateKey(...)来导出它们.然而,手册页声称格式已过时(实际上它看起来与通常的PEM格式不同).相反,它建议PEM_write_bio_PKCS8PrivateKey(...).
但是,PEM_write_bio_PKCS8PrivateKey接受EVP_PKEY对象.如何将我的RSA*密钥对转换为EVP_PKEY*结构以便在该函数中使用?
EVP_PKEY* evpkey = EVP_PKEY_new();
if (!EVP_PKEY_assign_RSA(evpkey, keypair))
throw ReadError();
int ret = PEM_write_bio_PKCS8PrivateKey(bio, evpkey, EVP_aes_256_cbc(),
pass_char_str, pass_len, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
ret始终为0.使用较旧的PEM_write_bio_RSAPrivateKey对我有用.我想要导出我的键,所以他们看起来像:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCvdbGZes3N/v3EqbbwYHW4rr4Wgav9eD36kVD7Hn5LIKwhfAqd
...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
谢谢.
c ×2
c++ ×2
necklaces ×2
ruby ×2
algorithm ×1
command-line ×1
cryptography ×1
cuda ×1
epoll ×1
gcc ×1
global ×1
gnu-screen ×1
gpgpu ×1
gpu ×1
linux ×1
linux-kernel ×1
macros ×1
ncurses ×1
openssl ×1
pem ×1
permutation ×1
pthreads ×1
rsa ×1
rspec ×1
scheme ×1
sockets ×1
termcap ×1
unix ×1
usb ×1
vt100 ×1