回答另一个Stack Overflow问题(这个)我偶然发现了一个有趣的子问题.排序6个整数数组的最快方法是什么?
由于问题是非常低的水平:
&&或||).真的这个问题是一种高尔夫,其目标不是最小化源长度而是执行时间.我把它叫做"Zening"代码在本书的标题中的代码优化禅由迈克尔·亚伯拉什及其续集.
至于为什么它很有趣,有几个层次:
这是我的参考(天真的,未优化的)实现和我的测试集.
#include <stdio.h>
static __inline__ int sort6(int * d){
char j, i, imin;
int tmp;
for (j = 0 ; j < 5 ; j++){
imin = j;
for (i = j + 1; i < 6 ; i++){
if (d[i] < d[imin]){
imin = i;
}
}
tmp = d[j];
d[j] = d[imin];
d[imin] = …Run Code Online (Sandbox Code Playgroud) 在python源代码中,我偶然发现我在字符串之前看到了一个小b:
b"abcdef"
Run Code Online (Sandbox Code Playgroud)
我知道u前缀表示unicode字符串,以及r原始字符串文字的前缀.
什么b样的代码和哪种源代码是有用的,因为它看起来完全像没有任何前缀的普通字符串?
我在Unix上使用C++程序,将消息发送到syslog.
当前代码使用与printf类似的syslog系统调用.
现在我宁愿为此目的使用流,通常是内置的std :: clog.但是clog只是将输出重定向到stderr,而不是syslog,这对我来说没用,因为我还将stderr和stdout用于其他目的.
我在另一个答案 中看到,使用rdbuf()将它重定向到一个文件很容易,但我看不到应用该方法来调用syslog,因为openlog没有返回一个文件处理程序我可以用来绑定它的流.
有没有其他方法可以做到这一点?(看起来非常基本的unix编程)?
编辑:我正在寻找一个不使用外部库的解决方案.@Chris提出的建议可能是一个良好的开端,但仍然有点模糊,无法成为公认的答案.
编辑:使用Boost.IOStreams是好的,因为我的项目已经使用了Boost.
可以与外部库链接,但也是一个关注点,因为它是GPL代码.依赖性也是一种负担,因为它们可能与其他组件冲突,在我的Linux发行版上不可用,引入第三方错误等.如果这是唯一的解决方案,我可以考虑完全避免流......(遗憾).
回答另一个问题,我编写了下面的程序来比较排序数组中的不同搜索方法.基本上我比较了插值搜索和二分搜索的两种实现.我通过计算不同变体所花费的周期(使用相同的数据集)来比较性能.
但是我确信有一些方法可以优化这些功能,使它们更快.有没有人对如何更快地使这个搜索功能有任何想法?使用C或C++的解决方案是可以接受的,但我需要它来处理具有100000个元素的数组.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include <assert.h>
static __inline__ unsigned long long rdtsc(void)
{
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
int interpolationSearch(int sortedArray[], int toFind, int len) {
// Returns index of toFind in sortedArray, or -1 if not found
int64_t low = 0;
int64_t high = len - 1;
int64_t mid;
int l = sortedArray[low];
int h = sortedArray[high];
while (l <= …Run Code Online (Sandbox Code Playgroud) 使用python 2.7,以下代码计算文件内容的mD5 hexdigest.
(编辑:嗯,不是因为答案已经显示,我只是这么认为).
import hashlib
def md5sum(filename):
f = open(filename, mode='rb')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf)
return d.hexdigest()
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用python3运行该代码,则会引发TypeError异常:
d.update(buf)
TypeError: object supporting the buffer API required
Run Code Online (Sandbox Code Playgroud)
我发现我可以使用python2和python3运行代码,将其更改为:
def md5sum(filename):
f = open(filename, mode='r')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf.encode())
return d.hexdigest()
Run Code Online (Sandbox Code Playgroud)
现在我仍然想知道为什么原始代码停止工作.看来,当使用二进制模式修饰符打开文件时,它返回整数而不是编码为字节的字符串(我说因为type(buf)返回int).这种行为是在某处解释的吗?
我在G-WAN网络服务器上找到信息的唯一地方是项目网站,它看起来非常像广告.
我真正知道的是,对于精通C语言的人来说,如果它易于使用并扩展其他体系结构.现在我主要关注脚本功能.
GWAN上的C脚本是否易于编写?您是否可以轻松地将新的C脚本更新并上传到服务器(比起其他架构上的某些PHP或Java页面更容易)?这样做时你必须重启服务器吗?您可以使用第三方或现有C库轻松扩展它吗?
欢迎任何其他反馈.
本机内置的python dict是否保证keys()和values()列表以相同的方式排序?
d = {'A':1, 'B':2, 'C':3, 'D':4 } # or any other content
otherd = dict(zip(d.keys(), d.values()))
Run Code Online (Sandbox Code Playgroud)
我一直都有d == otherd吗?
无论是真还是假,我都对这个主题上的任何引用指针感兴趣.
PS:我理解上面的属性不适用于每个行为都像字典的对象,我只是想知道内置的字典.当我测试它看起来好像是真的,并且它并不奇怪,因为具有相同的顺序,keys()并且values()可能是最简单的实现.但我想知道这种行为是否明确定义.
在另一个问题的热门评论主题之后,我开始讨论C99标准中有关C数组的内容和内容.
基本上,当我定义一个2D数组时int a[5][5],标准C99是否保证它将是一个连续的整数块,我可以将它投射到(int *)a并确保我将拥有一个25个整数的有效一维数组.
正如我理解标准的那样,上面的属性隐含在sizeof定义和指针算术中,但其他人似乎不同意并且说铸造到(int*)上面的结构给出了一个未定义的行为(即使他们同意所有现有的实现实际分配连续的价值观).
更具体地说,如果我们认为一种实现可以检测数组检查所有维度的数组边界并在访问1D数组时返回某种错误,或者不能正确访问第1行以上的元素.这样的实施可以是标准的编制吗?在这种情况下,C99标准的哪些部分是相关的.
回答另一个SO问题(那里)时出现了问题.
当我在python集上迭代几次(不在调用之间改变它)时,我可以假设它总是以相同的顺序返回元素吗?如果没有,改变订单的理由是什么?它是确定性的还是随机的?还是实现定义?
当我反复调用相同的python程序(不是随机的,不依赖于输入)时,我会得到相同的排序吗?
基本问题是,如果python set迭代顺序仅取决于用于实现集合的算法,还取决于执行上下文?
在python PEP8结束时我正在阅读:
使用时不要将布尔值与True或False进行比较 ==
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
Run Code Online (Sandbox Code Playgroud)当布尔值为时True,我对该推荐没有问题,但在检查时听起来很奇怪False
如果我想知道变量问候语是否为假,我为什么不写:
if greeting == False:
Run Code Online (Sandbox Code Playgroud)
如果我写if not greeting:它将具有与上述声明截然不同的含义.如果问候语是什么怎么办?如果是空字符串怎么办?这个PEP8推荐是否意味着存储布尔值的变量应该只包含True或False,并且这些变量应该避免None?
在我看来,它似乎是来自其他语言的静态类型的推荐,并且不适合python,至少与False相比.
顺便说一下,有谁知道为什么if greeting is True:被描述为更糟糕if greeting == True:?我们还应该明白那if greeting is False:也更糟if greeting == False:吗?