从”铁锹效应”想到……

铁锹效应想到……<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

——摘自《计算机世界》

人们从世界著名喜剧大师卓别林得一部名作《淘金记》里,知道了美国西部的淘金热时代。然而关于淘金,还有一个“铁锹的故事”却不为人所知。

很久以前,有人在美国西部挖到了金子的事情被一位美国先生知道了,这位先生也想发淘金财,于是心生一条妙计……

第二天,他逢人就说:“嗨!老兄,你知道吗?西部有好多金子!有人在那里挖到金子了,发了大财了!你还不赶快去那挖金子!”消息一传十,十传百,很快,人们都知道了这个消息,于是纷纷到东部去挖金子了。

这位先生也到了美国西部,可他并不是去找金子,而是在那里搭了一个帐篷,向过往的淘金人卖起了铁锹。到西部淘金的人越来越多,他的铁锹也卖得越来越火,淘金的人有的发了财,有的倾家荡产,而这位卖铁锹的先生却发了大财。

IT行业里,被公认为最典型的“铁锹效应”的就是耗材行业的诞生和兴起。IT产业的成长伴随PC行业的蹿升,而打印机则又紧跟PC的轨迹发展起来,PC和打印机创造了全球知名的几大IT厂商,人们对IT的向往和崇敬被具体到这些世界顶级企业。可是,人们并不知道,HP的全球打印机销量虽然名列前茅并经常稳居第一的宝座,但HP公司年利润有50%以上却是由原装打印耗材创造的。

PC,打印机这些硬件产品的价格不断下降,硬件的利润逐年变薄时,耗材——这一由打印机创造出来,并为打印机行业服务的新兴行业,却蒸蒸日上的蓬勃发展起来。

不论硬件行情如何,依附于硬件并为其提供服务和辅助功能的行业或产品,却因整体产业的发展而逐渐成长,壮大起来,就象那个卖铁锹的美国先生,他的成功在于有更多的人来淘金,而非淘金人是否发了财。

道理很简单,然而能从中有所领悟并找到方向的企业并不多。

第一个发明手机的人没有第一个制造手机的人赚钱多;而制造手机的人绝不会想到,今天短信竟成了创造巨额财富的“拇指之王”!互联网进入中国有十年的历史,而如今赢得“网络财富”的却大多是在经营网络广告,网上拍卖,网络游戏……

不是先驱者不够聪明,而是后来者能够审时度势地运用了“换位思考”的思维方式,站在先驱者和应用者的角度去想:“如果我是某某,那么我最需要什么。”换句话说,“铁锹效应”的实质就是一种为他人服务的意识,你成了别人的需要,你的存在就是合理和有价值的,那么你的付出就会有人埋单。

不仅如此,卖铁锹的那位美国先生还有一个值得学习的地方,当到西部的人还不是很多的时候,他把“西部有金子”的好消息与许多人分享而不是独享,于是他创造了一个“西部淘金人”的消费群体。

展开阅读全文

从一个全组合算法想到的……

03-14

我刚学算法,这两天都在写全排列全组合,都是用字典序法,今天有幸看到了 http://topic.csdn.net/u/20090217/21/f41ed9f6-f929-451c-a5c9-80d2e408422a.html?seed=2130980366 这张帖子,其中大牛们的算法很精妙让我耳目一新,但我现在有些疑惑,我按组合数学书上的字典序算法实现的全组合 n = 11(ABCDEFGHIJk)时 平均时间在0.3秒带屏幕显示排列结果(我的配置是迅驰I 1.4G 1G内存),和帖子里 127楼 min_jie 用C#实现的时间差不多。我不是认为我比帖子里的大牛们强,因为他们的方法很精妙,我一点都没想到过,而且要慢慢看才能理解他们的算法,也不认为他们钻研算法达到最好是徒劳的,因为当n很大时,只有最优秀的算法才能体现效率,但我的疑惑是最普遍的字典序算法比这些精妙的算法其实相差多少呢?而且当N很大时,真的就相差很大吗?希望大家多谈谈意见。rnrn这是我实现的字典序全组合 n = 11 完全按照组合数学书上算法写的。rn[code=C/C++]rnrn#include rn#include rn#include rnrn// 元素数量rn#define ELEM_SIZE 11rn// 打印元素排列rnvoid printString(char s[], int list[], int size);rn// 初始化数组rnvoid initList(int list[], int size);rn// 字典序生成组合rnvoid combinDict(char s[], int n, int k);rnrnint main(void)rnrn clock_t ct;rn // 定义 ELEM_SIZE + 1个元素数组,使下标与值相对应rn int k;rn char s[ELEM_SIZE + 2] = "0ABCDEFGHIJk"; rn rn ct = clock();rn // 字典序生成组合rn for (k = 1; k <= ELEM_SIZE; k++)rn rn combinDict(s, ELEM_SIZE, k);rn rnrn ct = clock() - ct;rnrn printf("time : %f\n", (double)ct / CLK_TCK);rnrn return 0;rnrnrnvoid initList(int list[], int size)rnrn int i;rnrn // 使 list[0] 为有符号最大值rn list[0] = ~0U >> 1;rnrn // 生成数组rn for (i = 1; i <= size; i++)rn rn list[i] = i;rn rnrnrnvoid combinDict(char s[], int n, int k)rnrn int i, j, *list, *blist;rnrn i = k;rn list = calloc(sizeof(int), n + 1);rn blist = calloc(sizeof(int), k + 1);rn rn // 初始化数组rn initList(list, n + 1);rn // 打印第一个元素组合rn printString(s, list, k + 1);rnrnrn // 字典序算法rn while (i > 0)rn rn if (list[i] < n - k + i)rn rn // 生成 blist[i]rn blist[i] = list[i] + 1;rnrn // 若 i 不是最后一个元素k rn if (i < k)rn rn j = i + 1;rn rn // 生成 blist[i + 1]...[k]rn while (j <= k)rn rn blist[j] = blist[j - 1] + 1;rn j++;rn rn rnrn // 使list[i]...[k] = blist[i]...[k]rn while (i <= k)rn rn list[i] = blist[i];rn i++;rn rn rn // 打印元素组合rn printString(s, list, k + 1);rnrn i = k;rn rn elsern rn i--;rn rn rnrnrnvoid printString(char s[], int list[], int size)rnrn int i;rn for (i = 1; i < size; i++)rn rn printf("%c", s[list[i]]);rn rnrn printf("\n");rnrn[/code]rnrnrn 论坛

没有更多推荐了,返回首页