什么编程语言有短而美的语法(在EBNF中)?
有些语言更易于解析.前段时间我创建了一个简单的VHDL解析器,但速度非常慢.不是因为它完全用Python实现,而是因为VHDL语法(在EBNF中)很大.Python的EBNF很漂亮但不是很短.
我建议像LISP这样的许多函数式编程语言都有简短的语法,但我对一种比较流行的简单命令式语言如C或Bash感兴趣.
有一个列表L.它包含每个任意类型的元素.如何有效删除此列表中的所有重复元素?必须保留ORDER
只需要一个算法,因此不允许导入任何外部库.
给定正整数b, c, m,(b < m) is True找到一个正整数e,这样
(b**e % m == c) is True
Run Code Online (Sandbox Code Playgroud)
其中**是取幂(例如在Ruby,Python或^中的某些其他语言中),%是模运算.什么是最有效的算法(具有最低的大O复杂度)来解决它?
例:
给定b = 5; C = 8; m = 13该算法必须找到e = 7,因为5**7%13 = 8
我试图了解以下最糟糕的C代码(来自uboot项目)的含义:
rc = ((ulong (*)(bd_t *, int, char *[]))addr) (bd, --argc, &argv[1]);
Run Code Online (Sandbox Code Playgroud)
它是什么?一个函数调用?它更具可读性吗?
在此先感谢您的帮助!
三角数是从1到n的n个自然数的总和.查找给定正整数是否为三角形的最快方法是什么?
这是第1200个到第1300个三角形数字的切割,你可以在这里轻松看到一个位模式(如果没有,尝试缩小):
(720600, '10101111111011011000')
(721801, '10110000001110001001')
(723003, '10110000100000111011')
(724206, '10110000110011101110')
(725410, '10110001000110100010')
(726615, '10110001011001010111')
(727821, '10110001101100001101')
(729028, '10110001111111000100')
(730236, '10110010010001111100')
(731445, '10110010100100110101')
(732655, '10110010110111101111')
(733866, '10110011001010101010')
(735078, '10110011011101100110')
(736291, '10110011110000100011')
(737505, '10110100000011100001')
(738720, '10110100010110100000')
(739936, '10110100101001100000')
(741153, '10110100111100100001')
(742371, '10110101001111100011')
(743590, '10110101100010100110')
(744810, '10110101110101101010')
(746031, '10110110001000101111')
(747253, '10110110011011110101')
(748476, '10110110101110111100')
(749700, '10110111000010000100')
(750925, '10110111010101001101')
(752151, '10110111101000010111')
(753378, '10110111111011100010')
(754606, '10111000001110101110')
(755835, '10111000100001111011')
(757065, '10111000110101001001')
(758296, '10111001001000011000')
(759528, '10111001011011101000')
(760761, '10111001101110111001')
(761995, '10111010000010001011')
(763230, '10111010010101011110')
(764466, '10111010101000110010')
(765703, '10111010111100000111')
(766941, '10111011001111011101') …Run Code Online (Sandbox Code Playgroud) 交换两个相同大小的非重叠内存区域的最快方法是什么?我说,我需要换(t_Some *a)用(t_Some *b).考虑到时空权衡,会增加临时空间提高速度吗?例如,(char *tmp)vs (int *tmp)?我正在寻找便携式解决方案.
原型:
void swap_elements_of_array(void* base, size_t size_of_element, int a, int b);
Run Code Online (Sandbox Code Playgroud) 启动一个新的大型C多平台项目,应遵循哪些规则以避免以后遇到困难?例如,作为一个新的开发人员,我可能很难在Linux内核源代码中自我导航 - 这是一个很好的例子,具有高度可进化但难以进入的软件结构,具有不完整的目录结构(例如声音目录和拱门)相同的目录级别).
作为项目架构师,我该怎么做以避免以后的陷阱?当然,我需要非常直观和自我一致的C语言和文件命名约定.但是什么是好的风格,什么不是?我应该只有一个目录还是数十个目录?我应该将所有头文件放在一个公共包含目录中吗?
你能不能给我一个很好的例子?(任何开源C项目)
哪个数据结构在计算复杂性方面最佳,以实现(key,val)项的字典,这些项必须仅支持以下命令:
Insert(key) - 附加val = 1的项目(key,val)Increment(key) - 增加现有的val(key,val)Find(key) - 返回(key,val)的valSelect(part_of_key)- 如果strstr(key,part_of_key)!=NULL以相同类型的新字典的形式返回所有项目(key,val)的列表(如果可能的话,不分配新的内存); 例如,如果字典是{(红色,3),(蓝色,4),(绿色,1)},则选择(重新)= {(红色,3),(绿色,1)}Max(i) - 返回所有项目中具有第i个最大值的项目; 例如,如果字典是{(红色,3),(蓝色,4),(绿色,1)},则Max(1)=蓝色,Max(2)=红色,Max(3)=绿色键是字符串,值是正整数.字典中的项目数量预计会非常大.
我认为它必须是两种不同数据结构的综合.但它应该是哈希表+二叉树或trie +排序数组还是其他什么?
我有一个包含大量C文件的巨型C项目.我必须找到所有内循环.我确信项目中没有任何O(n³)块,因此只能找到O(n²)-compexity块(循环中的循环).
是否可以使用grep找到所有内部循环?如果是,我可以使用什么正则表达式来查找所有类型的内部循环,例如{for,for},{while,for},{for,while},{do,while}等等?如果没有,是否有任何简单的unix-way方法(可能是多个greps或一种awk)?
通常我使用以下类型处理3D矢量:
typedef vec3_t float[3];
Run Code Online (Sandbox Code Playgroud)
使用smth初始化向量.喜欢:
vec3_t x_basis = {1.0, 0.0, 0.0};
vec3_t y_basis = {0.0, 1.0, 0.0};
vec3_t z_basis = {0.0, 0.0, 1.0};
Run Code Online (Sandbox Code Playgroud)
并使用smth访问它们.喜欢:
x_basis[X] * y_basis[X] + ...
Run Code Online (Sandbox Code Playgroud)
现在我需要一个使用SSE指令的矢量算术.我有以下代码:
typedef float v4sf __attribute__ ((mode(V4SF)))
int main(void)
{
v4sf a,b,c;
a = (v4sf){0.1f,0.2f,0.3f,0.4f};
b = (v4sf){0.1f,0.2f,0.3f,0.4f};
c = (v4sf){0.1f,0.2f,0.3f,0.4f};
a = b + c;
printf("a=%f \n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC支持这种方式.但是......首先,它给了我0.00000的结果.其次,我无法访问这些向量的元素.我的问题是:我如何访问这些载体的元素?我需要smth.像[0]访问X元素,[1]访问Y元素等
PS:我使用以下代码编译此代码:
gcc -msse testgcc.c -o testgcc
Run Code Online (Sandbox Code Playgroud)