Tag: 算法

查找整数的所有因子的有效算法是什么?

我正在编写一个非常简单的程序来检查一个数字是否可以均匀地划分另一个数字: // use the divider squared to reduce iterations for(divider = 2; (divider * divider) <= number; divider++) if(number % divider == 0) print("%d can divided by %d\n", number, divider); 现在我很好奇是否可以通过找到数字的平方根并将其与分频器进行比较来完成任务。 但是,似乎sqrt()实际上无法提高效率。 如何在C中处理sqrt()以及如何提高sqrt()的效率? 此外,还有其他方法可以更高效地解决问题吗? 而且, number % divider == 0 用于测试分频器是否可以均匀划分数字,除了使用%之外还有更有效的方法进行测试吗?

将multithreading添加到这个简单算法的有效方法是什么?

我会说我在C中的知识是公平的,我希望扩展一个程序来增强我对并行编程的了解。 它本质上是我所指的程序是一个powershell生成器,通过密码增加,例如来自0000 .. zzzz的特定字符集: 需要帮助用于地下室的powershell代码(3) 该算法概述如下(为此归功于杰罗姆) int len = 3; char letters[] = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”; int nbletters = sizeof(letters)-1; int main() { int i, entry[len]; for(i=0 ; i<len ; i++) entry[i] = 0; do { for(i=0 ; i<len ; i++) putchar(letters[entry[i]]); putchar('\n'); for(i=0 ; i<len && ++entry[i] == nbletters; i++) entry[i] = 0; } while(i<len); } […]

计算给定字符集的所有组合,以进行powershell匹配?

在练习multithreading时,我曾希望简单地构建一个可以计算字符集的所有可能组合(即powershell破解/匹配)和在线程之间分配工作的应用程序,以真正地测量并亲自了解线程如何影响算法在不同系统上的时间。 到目前为止,计算这个算法对我来说是一个很大的挑战。 在最近的一个线程( 什么是一个有效的方法来添加multithreading到这个简单的算法? )我似乎得到了我需要做的事情(轻松传递每个字符范围的特定部分来分配工作)虽然算法根本不起作用,我不明白复杂性足以在我的应用程序中修复它。 以简单,迭代的方式,我如何计算给定字符集的每个组合,具有特定长度(即长度为5?) 在示例中: unsigned char range[] = “abcdefghijklmnopqrstuvwxyz0123456789”; brute_force(range, len); //character set, length of string to compute all combinations of //… 我非常感谢能够减轻一些关于找到这样做的正确概念的压力。

使用二进制搜索在C中查找数字的平方根

试图使用二进制搜索计算出数字的平方根,但是我的实现不起作用,我不知道为什么 – 任何帮助表示赞赏,谢谢 inheritance我的代码。 ‘end’是我希望平方根的数字的值 while(start <= end) { float mid = ((start + end) / 2); printf("\nhalving mid"); if(mid * mid == end){ sqrt = mid; printf("\nsqrt = %d", sqrt); } if(mid * mid < end){ start = mid + 1; sqrt = mid; printf("\nsqrt: %d", sqrt); } else{ start = mid – 1; […]

validation二叉搜索树的空间复杂性

validation二叉树是否为BST的最佳算法如下 IsValidBST(root,-infinity,infinity); bool IsValidBST(BinaryNode node, int MIN, int MAX) { if(node == null) return true; if(node.element > MIN && node.element < MAX && IsValidBST(node.left,MIN,node.element) && IsValidBST(node.right,node.element,MAX)) return true; else return false; } 这个逻辑的空间复杂度显然是O(logN) ,我假设它是递归的代价。 价值是如何达到的?

如何避免两个句子,第一个字母相同,在一个洗牌中彼此相邻?

我有一个我编写的代码,它会对音乐曲目的文本文件进行随机播放,如何调整我的代码,以便每次运行程序时,都不会有两首以相同的第一个字母开头的曲目。 例如,艺术家Hozier的两首曲目不应该彼此相邻。 正确: Hozier – Take Me To Church Pink – So What Hozier – Cherry Wine 不正确: Hozier – Take Me To Church Hozier – Cherry Wine Pink – So What 这是我的代码: #include #include #include #include // Accepts: command line input // Returns: 0 if no error int main(int num_args, char *arg_strings[]) { int […]

分割如何改善Eratosthenes筛选的运行时间?

我遇到了一个分段的Eratosthenes筛子实施,它的运行速度比传统版本高出许多倍。 有人可以解释一下细分如何改善运行时间? 请注意,我想在[1,b]中找到素数。 它适用于这个想法:(寻找素数到10 ^ 9) 我们首先生成低于sqrt(10 ^ 9)的筛分质数,这是交叉多次所需的。 然后我们开始交叉第一个素数2的倍数,直到我们达到2> = segment_size的倍数,如果发生这种情况,我们使用(multiple – segment_size)计算下一个段中该倍数的索引并将其存储在一个单独的array(next [])。 然后我们使用相同的程序交叉下一个筛分素数的倍数。 一旦我们在第一段中划掉所有筛分质数的倍数,我们就在筛子arrays上迭代并打印出(或计数)质数。 为了筛选下一个段,我们重置了筛子arrays,并通过segment_size增加了较低的偏移量。 然后我们再次开始交叉倍数,对于每个筛选素数,我们从下一个数组中检索筛子索引,然后我们从那里开始交叉倍数…

是否有算法在线性时间内计算数组反转?

我知道使用增强的合并排序可以在O( n log( n ))操作中计算n元素数组中的反转次数。 但是,我遇到了一个不同的解决方案,它以某种方式设法计算O( n )时间内的反转次数,前提是输入是(1,2,3,…, n -1, n )的置换: 编辑:- 我很抱歉我粘贴的代码因为它在所有情况下都不起作用。 实际上这个代码用于这个问题 ,它通过了所有的情况。 但我仍然离开代码,以便它可以作为一些直觉,也许这个问题的线性时间解决方案将会出现。 注意: – 下面提到的代码不正确。 /* int in = 0; for (int i = 0; i < n; i++) { a[i] = a[i] – i – 1; } for (int i = 0; i 0) in = in + a[i]; […]

C中的钻石arrays排序

我在C中有以下作业。我基本上需要一种方法而不是解决方案。 我们有一个13 x 13arrays。 在arrays中,我们需要考虑钻石形状。 钻石之外的所有东西都被初始化为-1(不重要)。 示例5 x 5arrays – xx 1 xxx 2 2 2 x 3 3 3 3 3 x 4 4 4 x xx 5 xx x=-1 现在在这个数组中,每个条目的菱形中的值包含11位。 5 lsb包含一个数据(色调),另外6个包含另一个数据(直径)。 我们需要逐行地对数据进行排序,对于色调进行单调排序,然后逐列地对直径进行单调排序。 这样做最有效和最节省内存的方法是什么? 因为我们需要保存这个,所以最好是交换条目而不是创建另一个数组。 最后,我们将得到一个排序的钻石arrays(仍然是-1s)。 非常感谢你们!

当输入是奇数个BITS(不是字节)时,生成CRC8 / 16的最佳方法是什么? C或Python

所以我坚持使用在奇数位上添加CRC8 / CRC16的协议。 (即,它不能被8整除)在软件中为它生成CRC的最佳方法是什么? 有很多CRC算法使用表,但它们是每字节查找。 当然,一次只做一次“故障安全”。 但是有更好的方法吗? 也许主要通过表查找来完成它,然后一次完成它? 我目前在python中使用bitarray来处理这个问题。 但是C中的解决方案也可以。 谢谢! 编辑:请注意,我正在与现有硬件接口,这些硬件在奇数位上计算CRC。 (这对于HW来说很容易,因为它们一次只使用LFSR – 1位!)因此,虽然使用已知模式的填充可以用于完整性检查,但它会破坏hw兼容性。