Tag: 算法

了解OPT算法

好的,我正在尝试理解OPT算法,然后它会让我很容易编码。 我不能跟随幻灯片,它没有任何意义。 有人可以一步一步地告诉我如何做到这一点吗? 这看起来与LRU算法相同。 我们用计数器保留第二个arrays吗?

洪水填充算法

我正在使用turbo C ++在C中使用一个简单的图形库,因为我正在开发一个非常原始版本的绘画风格程序,每个都运行良好,但我无法使洪水填充算法工作。 我使用4路泛洪填充算法,首先我尝试使用递归版本,但它只适用于小区域,填充大区域使其崩溃; 阅读我发现实现它的显式堆栈版本解决了问题,但我没有真正看到它。 我开发了这样的堆栈: struct node { int x, y; struct node *next; }; int push(struct node **top, int x, int y) { struct node *newNode; newNode = (struct node *)malloc(sizeof(struct node)); if(newNode == NULL) //If there is no more memory return 0; newNode->x = x; newNode->y = y; newNode->next = *top; *top […]

0和1的数组组合

用0和1组合填充数组的好算法是什么。 例如,如果我有三列,则组合将是:(1 1 1)(0 1 1)(1 0 1)(0 0 1)(1 1 0)(0 1 0)(1 0 0)(0 0 0)它总共有8行(我希望我就在这里)。 那么如何预先确定所需的行数(取决于N个列数),然后如何以编程方式填充数组? 任何编程语言都很好(我因为熟悉而标记了C和lisp)这是所需的算法。 谢谢

64位数学运算,不会丢失任何数据或精度

我相信128位数据没有任何便携式标准数据类型。 因此,我的问题是如何在不使用现有标准数据类型丢失数据的情况下有效地执行64位操作。 例如:我有两个uint64_t类型变量: uint64_t x = -1; uint64_t y = -1; 现在,如何存储/检索/打印数学运算的结果,如x+y, xy, x*y and x/y ? 对于上面的变量,x + y得到-1的值,实际上是带有进位1的0xFFFFFFFFFFFFFFFFULL。 void add (uint64_t a, uint64_t b, uint64_t result_high, uint64_t result_low) { result_low = result_high = 0; result_low = a + b; result_high += (result_low < a); } 如何像add一样执行其他操作,从而提供适当的最终输出? 如果有人共享通用算法,我会很感激,这些算法可以解决使用这些操作可能出现的溢出/下溢等问题。 任何可能有帮助的标准测试算法。

使用GSL计算矩阵Kronecker乘积的有效方法

我的算法的瓶颈是我的functionKronecker产品叫KPro: gsl_matrix *KPro(gsl_matrix *a, gsl_matrix *b) { int i, j, k, l; int m, p, n, q; m = a->size1; p = a->size2; n = b->size1; q = b->size2; gsl_matrix *c = gsl_matrix_alloc(m*n, p*q); double da, db; for (i = 0; i < m; i++) { for (j = 0; j < p; j++) { […]

找到两个整数,使他们的产品接近给定的真实

我正在寻找一种算法来找到两个整数值x,y ,使得它们的乘积尽可能接近给定的双k而它们的差值很小。 示例 :矩形区域为k=21.5 ,我想找到该矩形的边长,其约束条件必须是整数,在这种情况下,一些可能的解是(排除排列) (x=4,y=5) , (x=3,y=7)和愚蠢的解(x=21,y=1) 事实上,对于(3,7)夫妻,我们与(21,1)夫妻的差异相同 21.5-3*7=0.5 = 21.5-21*1 而对于(4,5)情侣21.5-4*5=1.5 但这对夫妇(4,5)更可取,因为他们的差异是1 ,所以矩形是“更加平方”。 有没有一种方法来提取差异最小的x,y值,它们的乘积与k的差异也是最小的?

将特殊purpoes-strings转换为Integers的方法

我需要一个Key-Value对的内存数据结构(400 MB的数据)。 我对键有以下约束: 键和值都是分别为256和1024的文本字符串。 任何键通常看起来像k1k2k3k4k5,每个k(i)本身是4-8字节的字符串。 一些k(i)可能存在或可能不存在于键中。 每个k(i)有6-8种可能性。 然而,k3和k4有256000种可能性。 可以使用prefix_key迭代DS。 DS应针对此操作进行优化。 该操作分配迭代器,即它迭代整个DS并返回与prefix_key匹配的键值列表(例如,“k1k2k3。*”,k(i)如上定义)。 每次迭代都迭代这个迭代器(列表)。 释放迭代器可以释放列表。 使用DS获取字符串键会使密钥比较过于昂贵。 因此排除了DS(Hash,B + Tree)的某些选项。 我的问题是我们如何创造性地将String键转换为整数键?解决方案需要具有以下属性: 对于关键模式“k1k2k3。*”,它应该对整数的上限和下限进行生成,以便基于这些边界,在DS中只查找少数条目。 我在解决这个问题的背景下问这个问题

C中的所有可能组合

我试图在C中找到一个有效的算法,它为我提供了给定字符集的所有组合。 算法不应该递归。 最后,位数应该是灵活的。 例如: char set[] = “a1”; -> a1 aa 1a 11 我只找到了一个Perl解决方案,但它使用了substr() 。 我认为那不是那么快的表现。 对于C语言中的大多数算法,我发现只有排列… 德国C ++论坛上的一篇文章称,C ++ – STL解决方案比“原始”递归算法更快。

使用qsort函数以交替方式对整数数组进行排序。

/ *我最近学习了qsortfunction。 这个c代码给出了错误的输出。 需要帮助。 问题 – 以交替方式对整数数组进行排序。 (偶数指数的元素和奇数指数的元素分别排序)OUTPUT- 0 4 1 2 5 8 7 5 9 3 10 5 * / #include #include // This function is used in qsort to decide the relative order // of elements at addresses p and q. int comparator(const void *p, const void *q) { // Get the […]

实现最小化方法

我在2个变量x1,x2有一个函数 f = 3*x1^2 + 4*x2^2 + 5*x1 + 6*x2 + 10 考虑x是行向量,使得x = [x5,x6] ,其中x5,x6是向量的分量。 如果符号混淆,让我们考虑x = [x1,x1]但x1,x2可以是任意组件。 对于y ,同样的论点也适用。 然后我想找到a from (x + ay)这样它会使f最小化。 a是实常数, x和y是向量。 这在上面解释了。 如果这没有意义,那么让我们将x,y视为具有2个位置的1维数组。 因此,x(1),x(2),y(1),y(2)是它们的组成部分。 然后我想将数组y乘以符号变量a 。 例如, x=[4,5] , y=[-2,3]则, (x + ay) = (4,5) + a(-2,3) = (4-2a,5+3a) 。 a是这里未知的符号变量。 在f1替换(更清楚的是, f x1 = 4-2a的定义中的第一个参数,第二个参数x2=5+3a ) f1 […]