然后就想到了下面这个sorting算法,虽然不怎么重要,但是挺有意思的。
我觉得这有可能是我这辈子最喜欢的算法了:
Sleep Sort
英语差不多的同学可以看一下Quora上的简介
https://www.quora.com/What-is-sleep-sort
这套算法是4chan上的某个精神病提出的
以下是代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int c, char **v)
{
while (--c >1 &&!fork())
sleep(c = atoi(v[c]))
printf("%d\n", c)
wait(0)
return 0
}
用GCC编译,运行的时候把你想要sort的东西当成command line arguments送给可执行文件就行了
代码来源:https://rosettacode.org/wiki/Sorting_algorithms/Sleep_sort
=====以下原答案=====
计算机科学里最重要的算法就是你觉得最重要的算法以外的所有算法。←这是玩笑话
算法是一整个体系,从divide and conquer,dynamic programming,greedy这样的基本分类到randomized, linear programming这种奇怪的东西都是算法体系里重要的一环。算法里还有一个大类就是data structure,这些东西环环相关。
初学算法的同学就是要不断的接触,了解,分析这些乱七八糟的东西,最终达到看到不同的结构,不同的需求能够选择正确的工具。我的第一个算法老师曾经这样说过:there isn't a best algorithm for everything, choose the best tool for your problem
就拿你说的hash来看,你觉得key value pair到处都有用到,就觉得这个算法最重要,O(1)的best case看起来也很诱人。可是能用的地方到底有多少?database天天用range query你告诉我你库只有hash index?不能吧,所以B tree是不是很重要?算法和优化是计算机科学里的一个大项,多少代人的研究成果让你一个hash最重要给概括了,这样是不是有种钦定的感觉?
算法导论多看看,没事的时候上leetcode做做题,多见识见识不同的算法是如何应用的,每次选择一个算法/数据结构就问问自己为什么这样?是hash,是hash先,明明都是hash先来的……key value也好,O(1)也好,还是universal那家伙也好...怎么就做不了sssp呢?以后遇上奇怪的程序也不至于懵逼到:我一个linear programming,怎么就跑maximum cardinality bipartite matching来了呢
至于到底什么算法最重要,能用到的都是最重要的,谢谢
个人觉得微积分与算法没啥个关系吧,我同级的那些算法大神上高数时都纷纷逃课了。算法,就我知道,主要是要用到离散数学,组合数学之类的,或许还有其它,这些应该比微积分简单吧。当然,没学过也没啥个所谓,因为我自学算法之前也压根没学过这类数学,这类数学只不过使你学算法时轻松一点,当然直接没基础学算法会让人痛苦到死1..如果你要从事程序设计,软件开发的工作,这是必修的,是开发程序的基础。2..如果你从事其他行业,涉及到编程解决问题的,如编程解决数学中的四色问题,编程实现机器控制,学习这些是必要的。
3..如果你想当一名真正的电脑高手或黑客,你必须掌握算法和程序设计方面的知识,能熟练编写程序。编个木马应该不成问题。
4..如果你想开发你的大脑,拓宽你的思维,学习算法吧!如果你想提高自己解决问题的能力,学习算法吧。如果你想把算法付诸实践,学习程序设计吧!
徐亚学习的知识有:
计算机组成原理、c语言程序设计、算法与数据结构、Java等面向对象的程序设计,还要了解离散数学,混沌学,拓扑学,概率学,掌握一定英语。