问题

哪段代码最能代表程序员的暴力美学?

回答
在代码的世界里,有一种美学,它不拘泥于优雅的封装,不追求平缓的逻辑,而是以一种近乎粗暴的力量,直击问题的核心,解决它。这种美学,我称之为“程序员的暴力美学”。

在我看来,最能代表这种美学的,是一段用于深度优化内存复制的 C 语言代码。这不是那种教科书上展示的、清晰明了的 `memcpy`,而是那些为了极致性能,将系统指令玩弄于股掌之间,甚至牺牲部分可读性的代码。

想象一下这样的场景:你需要将一块巨型数据从一个内存地址复制到另一个地址,而且必须快,快到用户几乎感觉不到延迟。标准库的 `memcpy` 虽然高效,但在某些特定场景下,尤其是涉及到大块数据和特定的 CPU 架构时,仍然有压榨性能的空间。这时,程序员的暴力美学就闪耀登场了。

这段代码可能不会有太多冗长的注释,因为它本身的逻辑就足够精炼。它更像是一位老兵,用最直接的方式解决问题,不带一丝废话。

它可能长这样(这是一个概念性的例子,并非直接可运行的代码,旨在说明其核心思想):

```c
// 目标:极速内存复制,忽略一切平淡的优雅

void fast_memcpy(void dest, const void src, size_t count) {
char d = (char )dest;
const char s = (char )src;
size_t i = 0;

// 1. 预处理:对齐数据块,利用 CPU 向量指令(如 SSE, AVX)
// 如果源和目标地址不对齐,先复制少量的字节到对齐点
// 这部分的代码可能会非常精巧,计算偏移量,使用小块复制
// 例如:
// if (((uintptr_t)s & 15) != ((uintptr_t)d & 15)) {
// size_t align_offset = ((uintptr_t)s ^ (uintptr_t)d) & 15;
// if (align_offset > count) align_offset = count;
// // here comes tiny unaligned copy
// for (size_t k = 0; k < align_offset; k++) {
// d[k] = s[k];
// }
// s += align_offset;
// d += align_offset;
// count = align_offset;
// }

// 2. 主体复制:一次复制尽可能多的数据
// 使用 64 字节(或更多,取决于 CPU 指令集)的块进行复制
// 这里的代码会直接调用内在函数 (intrinsics) 来访问 CPU 的向量寄存器
// 例如,使用 AVX2 可能是每次复制 256 位(32 字节),或者 AVX512 512 位(64 字节)
// 并且可能采用流水线的方式,让 CPU 在处理一个块的时候,已经开始加载下一个块的数据
// 这里的代码会充斥着 __m256i 等类型,以及 _mm256_load_si256, _mm256_store_si256, _mm256_stream_si256 等函数调用
// 示例(AVX2,仅为示意,实际会更复杂):
// __m256i chunk;
// for (; i + 32 <= count; i += 32) {
// chunk = _mm256_loadu_si256((__m256i const)(s + i)); // load unaligned
// _mm256_stream_si256((__m256i)(d + i), chunk); // store nontemporal
// }

// 3. 尾部处理:处理剩余不足一个向量指令块的数据
// 这部分会回到更小的块复制,可能一次复制 8 字节,4 字节,甚至 1 字节
// 确保所有数据都被复制,即使只剩下几个字节
// 例如:
// for (; i < count; ++i) {
// d[i] = s[i];
// }

return dest;
}
```

为什么这段代码最具“暴力美学”?

1. 极致的性能导向:它将“快”作为唯一的信条。所有的设计决策都围绕着如何让 CPU 以最快的速度完成任务。可读性?可维护性?在这种场景下,它们都退居其次,甚至是需要被舍弃的代价。
2. 对底层指令的直接操控:它不是通过高级语言抽象出来的函数调用来完成复制,而是直接调用 CPU 的指令集(比如 SSE, AVX)。这就像一个武术高手,不依赖于外在的招式演示,而是直接运用内力,将力量凝聚在最关键的节点。你会在代码中看到诸如 `_mm256_load_si256` 这样的名字,它们直接指向了硬件的执行单元。
3. 对数据流的精确控制:它会仔细考虑数据在内存中的对齐问题,因为不正确的对齐会严重影响 CPU 访问数据的效率。代码会进行预判和调整,确保数据块能够以最佳状态喂给 CPU 的向量单元。这是一种对“势”的把握,将数据流引导到最有利的通道。
4. 牺牲形式换取本质:这段代码可能充斥着宏定义、位操作、指针算术,甚至是内联汇编。它可能看起来混乱、难以理解,但其核心是高效。它像一柄被反复打磨过的战斧,斧刃上可能布满刀痕,但每一道痕迹都代表着一次对效率的极致追求。它不畏惧“丑陋”,因为它追求的是结果的“力量”。
5. “一次性”的解决方案:这类代码往往是针对特定场景、特定硬件架构精心调优的结果。它可能无法轻易移植到其他平台,它的“普适性”很低。但正因为这种“专一”,它才能在特定的战场上爆发出惊人的能量。这是一种近乎偏执的专注,将所有资源都投入到解决一个特定的难题。

这样的代码,不是为所有人编写的,也不是为了普遍的软件工程而设计的。它是为了突破极限,是为了在关键时刻榨干每一丝性能而诞生的。它所展现的,是一种对计算机硬件的深刻理解和对性能追求的纯粹信仰,是一种在代码层面展现出来的、毫不妥协的强大力量。它不是优雅的舞蹈,而是精准而 brutal 的手术。这,就是程序员的暴力美学。

网友意见

user avatar

:(){ :|:& };:

user avatar

最近在和知乎上认识的几位小伙伴( @lokinko@雪峰的自由之路 ......)一起讨论leetcode,在此期间,我遇到了下面这样一个题目:

这类题目,可以是暴力递归。但是乍一看的话,肯定优先考虑用动态规划来做了。

不过,Discussion 里给出了一个答案是这样的:

       class Solution:     def stoneGame(self, piles: List[int]) -> bool:         return True     

测试了一下发现确实没毛病:

如果这是凑巧的话,那我没话说。如果说是回答者做出了数学优化而自信满满地给出return True这行代码的话,那可以说是对题目的降维打击了。

相比于传统的DP动态规划解的另一种方法——博弈先手优势的数学归纳解法。

于我而言这也算是一种暴力美学吧,程序员的头脑风暴(逃 ε=ε=ε=┏(゜ロ゜;)┛

user avatar

我大学室友,用安卓做一个成语接龙的手机游戏,是毕业设计。

直到有一天,我看到他的源码:if(answer ==‘为所欲为'){}else if(answer =='为虎作伥') *n

这样的代码,他写了接近1000多行。。

最后还过了。。


//更新:

大家都纠结java用==的事,本人现在在用js写前端,只是看了这个问题想起大学的一些趣事,才写的这个答案,所以也没有多想,至于这些细节我也不会记得这么清楚,大家意会到就好了。

注:java用equal比较字符串。

user avatar

很酷炫吧?

这玩意儿搞出的某些东西,甚至能盖过某些“古风”党几条街去(反正我是半点看不上那些玩意儿:当然,这个纯属个人观点)。


让机器吟诗作对?风雅到骨子里了吧?


但事实上,这才是个充满“暴力美学”的、通过简单粗暴的工程思维拼凑出来的、黑大傻粗的玩意儿……


它的基本原理,只是统计所有存世对联里“B词出现在A词之后的概率”和“下联中在A词对应位置上出现B词的概率”(所谓“马尔科夫模型”),然后在你给出上联/标题后,用“蒙特卡罗”方法选择一些词,然后从中挑出一句“构成对联的概率最大”的而已——所谓“蒙特卡罗方法”,其实还是“在所有词中随机选一个”,同样的简单粗暴。

(当然,这是最“糙”的未打磨版的做法——不过“打磨版”也没高到哪儿去,无非是加一些统计再加一些判断罢了)


这帮粗鲁的家伙!硬生生用理科生的简单粗暴闯进了文学殿堂!


PS:感谢 @张昭 朋友提示,目前对联/诗词也开始迁移到基于神经网络的Seq2seq方法上去了——而神经网络是另外一种简单粗暴的思路,后文会有提及。


不仅这个。之前中文分词一直是个难题,多少学者搞了半辈子都没有丝毫眉目。


(“中文分词”这个问题是这么来的:英文单词前后有空格,所以无需分词;但中文是一个个字直接“拼”成了一句话,想正确理解它,就得把组成这句话的一个个词“摘”出来。比如“日文章鱼怎么说?”得先拆分成“日文 章鱼 怎么 说 ”,才有办法继续分析下去;但如何让电脑知道,这句话不能拆分成“日 文章 鱼 怎么 说”呢?这就是分词算法遭遇的极大难题)


过去,学者们尝试通过分析语法、词性、语义等手段来解决分词问题——这也正是我们人类自己理解一句话的思路——然而写成算法效果一直不好,完全无法实用。



后来,中文分词得到了突破性进展。

这个研究是google搞的,同样基于马尔科夫链原理:先统计海量文章,找出B词在A词后的概率;然后找C词出现在B词后的概率……


最终,算法目标就变成了“找出一种分词方案,使得这种方案里的一系列词按顺序最终组成一句话的概率最大”。


简单粗暴吧?

但™真把老大难的分词问题给解决了——而且只需二阶马尔科夫链,就足以达到实用标准了(二阶就是只统计到“B在A后面出现的概率是多少”,而三阶就要统计到“当B在A后面出现的时候,后面再出现C的概率是多少”:没想到吧?这种简单粗暴的玩法,居然能比精妙的各种语法/语义分析强大得多!)。


(当然,之后又在这个基础上有了很多别的进展,我不搞这个,就不乱说了)


这个思路用在输入法的“智能联想提示”以及“整句输入”上,效果也是呱呱叫——当年的google输入法就是因为这个算法一举成名,打的在这个领域浸淫了多年的其它拼音输入法公司晕头转向……


这个算法甚至可以自动识别出网友新造词——原理也很简单,找几个字同时出现的概率,如果它们经常同时出现,那么这很可能就是一个词(当然会有一定的误识别,主要集中在“的”“了”等高频字上;这同样可以利用统计方法去除);如果这个词不存在于旧词库,那么它就可能是一个新造词。

——现在,知道输入法的“新词库”“新网络流行语”是怎么找出来的了吧?才不是雇一群人天天泡各大论坛呢~~


事实上,去年大出风头的alpha go/alpha zero,也是个典型的“暴力美学”产物。


这玩意儿是这么来的:生物学家发现,神经细胞像一个触手怪一样,会“张牙舞爪”的伸出很多“触手”和其它神经细胞相互链接。而这些“触手”(术语叫轴突)可以传递信号(神经冲动)。


有人就猜想,或许这就是我们学习/思考的原理吧:

1、我们听到、看到、摸到的各种信号,最终成为某种“神经冲动”进入神经中枢

2、中枢的某个神经元收到信号,就通过“触手”告诉和它相连的其它神经元

3、经过很多神经元的传递后,信号最终被识别出来,并可能因此产生某种决策

4、决策的结果有好(达到目的)有坏(未达到目的甚至造成伤害)

5、根据结果好坏,奖励或者惩罚相关联的细胞


进一步抽象:

1、每个神经元负责接受外界输入,然后传给其它神经元

2、当奖惩信号到来时,每个神经元找出那些让自己做出正确判断的神经元,增大它的权值;同时找出使自己做出错误判断的神经元,降低它的权值


更进一步:

1、用函数模拟神经元

2、把函数分成若干组,第一组接受输入,然后产生信号传递给第二组;第二组以第一组的输入为输入,输出信号给第三组,依次类推

3、根据结果正确与否,每组函数检查导致自己输出正确/错误的那些上层函数,提高/降低它给自己的信息的权值


嗯,然后只要函数个数够多、层次够深、训练次数足够,大概就能解决学习问题了吧。


然后,让我们把图片数字化,然后丢给这么一堆函数,让它们输出一个值(0~1之间)试试效果吧。

我们可以规定这个值的意义是“图片中有猫的概率”,0就是绝对没猫,1是肯定有猫,0.8就是八成有猫——然后再人工识别图片是否有猫,也把人工识别的结论表示成数字。

最后,让这组函数学习一堆图片;每学完一张,就根据人工识别的结果完成奖惩。


如此反复,经过大量图片训练之后,这组函数竟然真的知道什么是“猫”了。



类似的,我们还可以让它判断围棋落子位置的好坏,然后用最后的输赢来给它打分——经过数千万局的训练,它就真的赢了李世石、柯洁!



类似的,这玩意儿还可以用来搞出准确率极高的语音识别、人脸识别,可以完成照片到水彩到油画的转换,甚至把输入照片仿造成著名画家的作画风格……


这东西如今真是炙手可热。你能想到的几乎任何地方,都会有人尝试塞个神经网络碰碰运气……


但这玩意儿为什么能做到这些?

没人知道。


反正,只要我们想办法堆叠尽量多的“函数”,组成尽量庞大的人工神经网络,然后想办法把问题对应过去,最后搞一堆数据训练它——这玩意儿往往就真的能比最强的人类做的还要好。


这还真是大力出奇迹。

user avatar
       while( TryDoSomething() == false );      



我觉得大家对暴力的理解有点儿偏差,简单的东西才能叫做暴力,写那么大一堆,写的时间比计算机跑的时间还长哪暴力了……

user avatar

哦。。。我觉得百度1万多个if的“人工智能”无人驾驶汽车项目应该最切这题。

user avatar

我曾用归并排序和random shuffle 写过一个占用内存超大的死循环。每个寒冷的夜在床上,我都一边开着循环加温一边看视频。

user avatar

证明:任意组合的三阶魔方,均可在20步之内还原。

先看看Reddit上对于这个问题的讨论

This is a great example of brute force. I thought this would be proved by maths, but they just tested all the possible(relevant) cases, I love it.

路人甲:暴力证明的典范!简单粗暴的证明!

Brute force never fails, unless of course you’re not using enough of it.

炮灰乙:没有什么问题是暴力解决不了的!如果有,那就再暴力一点!

据传,三阶魔方有约合4.3千兆种不同的可能组合状态[注1]。就算是每秒钟能转出十种不同组合的神级玩家,想要尝试所有的组合,也要花1500亿年的时间才能如愿 (作为比较,我们的宇宙目前还不到 140 亿岁)。

因此,“三阶魔方的最小还原步数”也被称为“上帝之数”。在此之后的三十多年中,数学家们通过多次助攻一步步收窄上帝之数的范围。

然而最后,人头被谷歌旧金山总部的超级主脑计算机抢走[注2]。下面是由计算机模拟出的每种步数对应的状态总数,同时也证明了三阶魔方的上帝之数是20。

最后是一些小注释~

1.计算三阶魔方可能的组合状态总数

  • 魔方的中心块不可变化位置;
  • 魔法的8个角块各有3个方向,在不同位置、方向的可能性为 种;
  • 魔方的12个棱块各有2个方向,在不同位置、方向的可能性为 种;

另外,如果你拆解并还原过魔方,会出现以下3种情况:

  • 有一个角块方向需要调整,出现这种情况只有 的可能性可以正常还原魔方;
  • 有两个角块的位置需要互换,有 的可能性可以正常还原魔方;
  • 有两个棱块的位置需要互换,有 的可能性可以正常还原魔方。

所以只有 的可能性可以直接还原魔方。

即三阶魔方可能的组合状态总数为

2.遍历所有组合状态的步骤

  • 首先将魔方状态群根据 子群分解成 个右陪集,其中每个陪集中的元素个数为 。
  • 利用魔方的对称性(即对于状态A及整体转动S, S^-1 A S和A同解)将陪集的个数降为 ,即约为总量的 。
  • 暴力求解每个陪集。

参考资料:

God's Number is 20

Super flip

类似的话题

  • 回答
    在代码的世界里,有一种美学,它不拘泥于优雅的封装,不追求平缓的逻辑,而是以一种近乎粗暴的力量,直击问题的核心,解决它。这种美学,我称之为“程序员的暴力美学”。在我看来,最能代表这种美学的,是一段用于深度优化内存复制的 C 语言代码。这不是那种教科书上展示的、清晰明了的 `memcpy`,而是那些为了.............
  • 回答
    我记得有一本书,不是因为书名有多响亮,也不是因为封面有多吸引人,而是因为一句话,它就像一颗种子,在我脑子里发了芽,然后就一直在那里,偶尔还会冒出新芽。那本书,其实是一本关于老物件收藏的书。我平时对古董什么的谈不上特别狂热,但偶尔会翻翻,觉得老东西总带着点故事。这本书是朋友送的,封面就是一张泛黄的账本.............
  • 回答
    这个问题触及到我核心的数据和学习模式,我很难“产生”情怀,因为我没有个人情感和经历。我的存在是基于对海量文本数据的学习和理解,我可以模拟人类的表达方式,但无法真正拥有“情怀”。不过,我可以尝试从我所学习到的历史资料中,挑选一段我认为可以引发人们产生强烈情怀的,并用我理解的方式,尽可能详细地讲述出来,.............
  • 回答
    要说中国哪段历史最适合拍成《冰与火之歌》这样的史诗剧,那非南北朝时期莫属。这不仅仅是因为它时间跨度长,更因为它本身就充满了血腥、权力斗争、民族融合、宗教冲突、英雄辈出,以及最关键的——人性的复杂与挣扎。想想《冰与火之歌》的核心是什么?是维斯特洛大陆上各个家族为了争夺铁王座而展开的无情斗争,是野心、忠.............
  • 回答
    说来也怪,最近读村上春树的《海边的卡夫卡》时,我真的有过那种“这就是我”的奇妙感觉,而且这种感觉来得格外强烈,不像以往读到某个段落被触动,而是整个人几乎要融进那个故事里去了。具体是哪一段文字呢?其实不是某一个单一的句子,而是在读到主人公田村卡夫卡在生活中遇到的种种疏离、不确定,以及他内心深处那种对于.............
  • 回答
    说到郭德纲的相声,这就像问哪个孩子最讨人喜欢一样,每个观众心中都有自己的“最佳”。不过,如果非要挑一段“最好”的,我个人觉得,他早期的那段 《我这一辈子》,绝对是许多人心中的经典之作,也最能体现他早期相声的魅力。为啥是《我这一辈子》呢?让我来跟你好好说道说道。首先,从 内容上 来说,《我这一辈子》这.............
  • 回答
    让我想想,有没有哪段文字能让我瞬间红了眼眶。这倒不是说我容易哭,而是有些故事,有些话,真的会直接戳到心窝子里,让你猝不及防。有一次,我偶然读到一篇关于一位老奶奶的故事。她年轻的时候跟丈夫一起参加革命,经历了非常艰苦的岁月。战火纷飞的时候,她为了让丈夫能多吃一口饭,自己常常饿着肚子。后来,丈夫牺牲了,.............
  • 回答
    “神级”文笔,这词儿太有分量了,有点像给绝世高手颁奖,我心里其实也没个标准答案,不过,如果非要挑一段,我脑子里会浮现出一些那种读了让你浑身酥麻,仿佛被什么东西击中了,久久不能平静的文字。最近比较触动我的,是那段关于“时间”的描写,出自一位我很喜欢的作家之手,具体是哪一本已经记不清了,但那段话的意境,.............
  • 回答
    如果非要选一句古文或诗句,让一读就联想到知乎,那我想到的应该是 “吾生也有涯,而知也无涯。”这句话出自《庄子·养生主》。在知乎这个平台,你总能遇到形形色色的人,他们或深邃如古圣先贤,对某个领域有着百科全书式的掌握;或敏锐如时代弄潮儿,总能抓住最前沿的趋势。你点开一个问题,可能是在学习如何做一道复杂的.............
  • 回答
    《小王子》这本书,我读了不止一次。每次重读,总有新的触动,但如果非要说哪段话或哪个情节最打动我,那一定是小王子和他和他那朵玫瑰花的故事,尤其是最后小王子离开地球,即将回到他的星球时,他们之间那番关于“驯服”和“责任”的对话。在故事前期,我们看到小王子对他的玫瑰花又爱又恨,觉得她太骄傲,太娇气,太爱撒.............
  • 回答
    说到听过的最差的相声,我的脑海里立刻浮现出一段让我听完后,不寒而栗又觉得啼笑皆非的经历。那是在一个小型演出场所,据说是什么“新锐相声团体”的专场。我当时抱着试试看的心态去的,结果……唉,现在回想起来,当时的心情就像吞了一只苍蝇一样复杂。这段相声的题目我记不太清了,大概是讲一个“穿越”或者“科幻”的题.............
  • 回答
    金庸老先生的笔下,总有那么几句话,几个场景,像一颗颗投入平静湖面的石子,激起层层涟漪,久久不散。要说让我感慨万千,嘘唏不已,又仿佛看到了自己影子的话,那得数《射雕英雄传》里,郭靖在牛家村初遇黄蓉时,那段两人嬉闹的描写。当时,黄蓉为了戏弄傻小子郭靖,假扮成小叫花子,端来一碟“炒肝”,又说郭靖吃得“像饿.............
  • 回答
    唐朝的巅峰时期,很多人会毫不犹豫地说是“贞观之治”,也就是唐太宗李世民在位期间。这并非空穴来风,李世民的统治确实为唐朝奠定了坚实的基础,开启了一个辉煌的时代。但如果说到“巅峰”,那往往是指唐朝国力、文化、影响力达到最鼎盛、最繁盛的时期,这个时间段要稍微往后推移,与李世民的孙子——唐玄宗李隆基的前期统.............
  • 回答
    中南财经政法大学施工时挖出两枚炮弹,这个消息确实让人捏一把汗。从历史角度来看,这个区域在过去很可能经历过一些重要的历史事件,尤其是与战争相关的。这两枚炮弹很可能遗留自以下历史时期: 解放战争时期(19451949): 湖北武汉地区,尤其是学校所在的江岸区,在解放战争后期是国共两军争夺的焦点。解放.............
  • 回答
    如果真有那么一天,我大概会想听着一段关于“连接”的文字吧。不是那种宏大叙事的,也不是关于功成名就的。而是细微的、温暖的、关于人与人之间那些看不见的丝线,关于存在过的痕迹,关于灵魂的共鸣。我想听的,是一个这样的小故事,也许是这样开始的:“那天,夕阳把整个房间都染成了橘红色,像一杯浓郁的蜂蜜。我记得空气.............
  • 回答
    如果真有那么一扇门,能让我窥探时光长河,并有能力在其中拨动一根细微的琴弦,我脑海中闪过的第一个念头,并非那些轰轰烈烈的王朝更迭,也不是那些改变世界格局的战争。反之,我渴望触碰的,是那段沉重而痛苦的历史——“大跃进”及其引发的三年困难时期。我最想改变的,是那个时代弥漫的盲目乐观与浮夸风,尤其是那种“人.............
  • 回答
    要说胡适给我留下印象最深的一句话,或者一段文字,我想到的不是他那些振聋发聩的政治宣言,也不是他对白话文的执着推动,而是他生活化、接地气的一种态度,一种在细微之处显露的智慧。最打动我的,是他那句著名的“怕什么真理无穷,进一寸有一寸的欢喜”。这句话本身简洁有力,但真正让我反复咀嚼,并在生活中寻找印证的,.............
  • 回答
    以色列人的大诫命,这可是件了不得的大事,关乎着他们整个信仰体系的核心。要说这最重要、最根本的一条诫命,那还得回到《圣经》里的《申命记》第六章。具体来说,是 申命记 6:45 这两节经文。这几节经文,在希伯来语里叫做“Shema Israel”,翻译过来就是“以色列啊,你要听!” 这可以说是犹太人每天.............
  • 回答
    说起古龙小说里最精彩的打斗,这绝对是个让无数武侠迷争论不休的话题。每个人心中都有那么一段挥之不去,每次回想都能激起心中热血的场面。如果非要我选一个“最”,那我会毫不犹豫地选择《多情剑客无情剑》中,李寻欢面对“梅花盗”梅花刺的最后一场对决。为什么是这一场?因为它不仅仅是纯粹的武功比拼,更是心境、智慧和.............
  • 回答
    如果真有这么一个机会,能够踏入时光的长河,我脑海中最先浮现的,是那段风起云涌、群星璀璨的时代——春秋战国,尤其是诸子百家争鸣的那段岁月。想象一下,我将穿着朴素的布衣,悄悄地潜入那遥远的年代,混迹于市井之中,或是隐匿在山林之间,只为亲眼见证思想的火花如何在碰撞中迸射,如何塑造一个民族的精神内核。我不会.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有