ホームページ  >  記事  >  php教程  >  プログラミングアルゴリズムと人生の選択

プログラミングアルゴリズムと人生の選択

WBOY
WBOYオリジナル
2016-06-21 08:50:36924ブラウズ

毎年、私が仕事を探していると、たくさんの人からメールを受け取ります。いつもオファーの選び方、Tencent と Douban のどちらに行くべきか、外資系企業に行くべきか国内企業に行くべきかなどについて尋ねられます。起業したいですか、それとも大学院入学試験を受けたいですか、北京に来ますか、それとも故郷に戻りますか? ThoughtWorksに行くべきでしょうか? …待って、待って。今年の 7 月から現在まで、私はそのようなメールを 60 通以上受け取り、返信しました。私は彼らが自分の考えを整理し、彼らが最も望んでいることを理解できるように手助けします。 (注:今後同様のメールには返信しません)。

親や先生に色々と手配されて育った我が国の人々は、ある日親や先生がついていけなくなると、何をすればいいのか全く分からなくなるということを深く知りました。選択してください。そして私は最近アマゾンを辞めて転職しました。今年も年末になったので、昨年の記事「3つの物語と3つの質問」と同様に、こんな記事を書こうと思いました。

いくつかの例

私たちの選択に影響を与えるさまざまな要因に直面したとき、都市、企業規模、会社の性質、給与、プロジェクト、戸籍、テクノロジー、方向性、ビジョン...また、2 つの会社の間で何らかの問題に巻き込まれる可能性もあります。以下にいくつかの例を示します。

· あるネチズンは、Tencent は非常に大きいので上海 Tencent に行ったが、転職したい場合の給料は Douban ほど高くはなかった (少しも低くなかった) と言いました。給与ポイントは、将来の高給与に直接関係します。私は、豆板に行くべきだと言いました。彼は、豆板は北京にあり、汚染がひどく、戸籍もなく、生活環境が良くないと言いました。私はテンセントに行くように言いました。彼はテンセントの最近の組織変更により不安定になっていると言いました。それなら、開発が遅い、安定した開発を行っているDoubanに行くと言いました。同氏は、Douban の収益性が不透明で、Python を使用するのが好きではなかったと述べました。それならテンセントに行きましょう...

· 別のネチズンは、故郷に戻りたい、なぜなら故郷の方が人脈が良くて仲良くなれるから、と私に言いました。でも、大都市に滞在したいのは、大都市は私の目を開いてくれるからです。

· 別のネチズンは、英語を練習して視野を広げるために外資系企業に入社したいが、外資系企業の歯車になると自分のアイデアが実現できないのではないかと心配していると語った。彼は友人に起業するよう勧められ、起業することは良いことであり、素晴らしい運動になると考えていましたが、友人がやっていることでうまくやっていけるかどうかはわかりませんでした。

· Sinovation Ventures の特定のチームと大学院入学試験のどちらを選択するか迷っている別のネチズンがいます。彼は、Sinovation Ventures のプログラムは平均的だと考えています。しかし彼は、チームが非常に情熱的であると感じていますが、その一方で、自分の学歴では大学院の学位を取得することでより良い仕事を見つけることができるはずだと感じています。

・友人の中にも、どのテクノロジーを学べばよいのかという質問をしている人もいます。学んではいけないテクニックは何ですか?あるいは、最速で学ぶにはどうすればいいのか、技術的な道筋はどうあるべきなのか?バックエンドだけをやっていてフロントエンドはやっていないという人もいますし、アルゴリズムの研究だけをしていてエンジニアリングはやっていないという人もいます。なぜなら、彼らは人生には限界があり、自分の職業には専門性があると感じているからです。

・ちょっと待って...

個人的には、コンピュータ サイエンスを専攻していない人が選択できず、どうすればよいか分からないとしたら、それはそれで終わりだと思います。しかし、コンピュータ サイエンスを専攻して生まれた人は、アルゴリズムを勉強してきました。アルゴリズムを理解している人は、その選択方法を知っているはずです。

ソートアルゴリズム

すべてを望むことはできないので、最も重要なものだけを望むことができます。何が最も重要かを知りたければ、自分の心の中にある願望や野心を明確に理解する必要があります。 、もつれた時間を過ごすことになります。

したがって、選択に迷った場合は、並べ替えアルゴリズムを参照する必要があります。

・まず一番参考にしていただきたいのは「バブルソート」です。このアルゴリズムの考え方は、毎回最大の数値をバブルするというものです。したがって、自分の選択に影響を与える要因を前にして、自分に「1 つだけ欲しいとしたらどれが欲しいですか?」と自問する必要があります。そして残りは諦めてもいいのです。したがって、最大の数値を 1 つずつ抽出し、この決定要素を使用してオプションをフィルタリングすると、何を選択すべきかをより簡単に知ることができます。このアルゴリズムは、気が散る考えが少ないほど、選択が容易になることを示しています。

· そうですね、おそらく、2 つの決定要因の大きさを比較する方法に迷っているかもしれません。たとえば、給与とビジネスの見通しの違いがわかりませんか。事業展望>能力は向上しているか?したがって、バブリングを実行する方法はまったくありません。それなら、「クイックソート」のアイデアを参照するとよいでしょう。このアルゴリズムは、最初に最大の数値を見つける必要はなく、ただ取り出す必要があることを示しています。価値観に一定の基準を設け、それを満たせるものを右側、満たせないものを左側に配置します。たとえば、条件が「給与が 5,000 元を超え、事業の見通しが 3 年以上の企業」である場合、この条件を使用してオプションをフィルタリングできます。その後、この基準を調整して再帰を続行できます。このアルゴリズムは、選択基準が明確であればあるほど、選択が容易になることを示しています。

これら 2 つは並べ替えアルゴリズムの中で最も古典的なアルゴリズムであり、インタビューでテストする必要があります。すでにご存知かと思います。したがって、このアルゴリズムを人生の選択に適用するのは問題ないと思います。嘘について、自分が何を望んでいるのか知っていますか?

並べ替えアルゴリズムの中心的な考え方は、ユーザーが最も必要なものを認識し、最も望むものを認識し、それに基づいて選択できるようにすることです。

貪欲なアルゴリズム

いわゆる貪欲アルゴリズムとは、選択の各ステップで現在の状態 (注: 現在の状態です) で最良または最適 (つまり、最も有利な) 選択を取る方法を指します。結果が最良または最適なアルゴリズムになることを期待しています。貪欲アルゴリズムの最も古典的な例の 1 つは ハフマン符号化 です。

人間の場合、ほとんどの人は物事を行うときに貪欲なアルゴリズムを使用します。

・例えば、36元を両替したい場合、通常は20元、10元、5元、1元の順に両替します。

· または、交差点を渡って斜めのブロックに行きたい場合も、貪欲なアルゴリズムを使用します。緑色のライトのどちらの側が先に点灯しても、最初にそこを渡り、その後 90 度曲がります。度で赤信号を待ってから道路を横断してください。

そのような例はたくさんあります。選択に関しては、ほとんどの人は貪欲なアルゴリズムを選択します。これは、将来が非常に単純なアルゴリズムであるため、一度に 1 つのステップしか実行できず、自分にとって最も有益な判断と選択を行うことができます。現状では。

給与に貪欲な人もいるだろうし、プロジェクトに貪欲な人もいるし、ビジネスに貪欲な人もいるだろうし、役職に貪欲な人もいるだろうし、自分の利益に貪欲な人もいるだろう...何もない。これらは間違っています。貪欲アルゴリズムには何も問題はありませんが、大域的な最適解ではありませんが、局所的な最適解や準最適解を見つけることができます。実際、次善の解決策があることは悪いことではありません。貪欲なアルゴリズムは基本的に、迅速な成功を求めるアルゴリズムですが、このアルゴリズムが悪いということではありません。貪欲が長期的かつ持続可能な場合はどうなるでしょうか。 。

動的計画

しかし、貪欲な手法では、通常、考えられるすべての解決策をテストするわけではないため、ほとんどの問題に対して最適な解決策を見つけることができないことがわかっています。貪欲アルゴリズムは近視眼的な動作であるため、現在の状況に基づいて判断するだけ、つまり時期尚早に決定を下すため、最適な解決策を達成することはできません。

動的プログラミングと貪欲アルゴリズムの最大の違いは、貪欲アルゴリズムは選択を行って後戻りできないことです。ダイナミック プログラミングは、ロールバック機能を使用して、以前の計算結果を保存し、以前の結果に基づいて現在の選択を行います。

動的プログラミング アルゴリズムは、少なくとも 2 つのことを教えてくれます:

1) 過去と未来を結び付けることは非常に重要です。旅の準備をするとき、最後の経験は将来の経験を開くだけでなく、その後の経験にも役立ちます。あなたの一歩一歩は無駄ではありません。

2) ロールバックできるかどうかも重要です。つまり、目の前に 2 つの選択肢があり、1 つは A 社、もう 1 つは B 社です。今日 B 社を逃した場合、明日は取り戻すことができますか?

たとえば、2 つのオファーがあり、1 つは Yahoo から、もう 1 つは Baidu からです。上記の最初の点は、Yahoo と Baidu のどちらがより大きなプラットフォームをオープンできるのかを考えさせます。上記の 2 番目の点は、Yahoo に入社した後で適切な選択をしなかった場合でも、Baidu に戻ることができるかどうかを示しています。それとも、Baidu に参加した後、簡単に Yahoo に戻ることができますか?

ダイクストラ最短経路

最短パスは Greedy + DP アルゴリズム です。かなりクラシックです。このアルゴリズムの一般的な考え方は次のとおりです:

1) 初期化中、すべてのノードは無限にあり、デフォルトでは到達できません。

2) 最も近いノードから始めて貪欲に始めます。

3) 上を歩いて到達できるノードを確認し、すべてのターゲット ポイントまでの距離を計算して更新します。

4) 次に、最短の起点を持つノードを貪欲に実行します。以下同様です。

このアルゴリズムは、私たちにそのような啓発をもたらしました:

友人が私に、建築家か特定の技術分野の専門家になりたい、そしてその目標に向かって諦めずに着実に前進すると言っていたのを覚えています。私はまだ彼を励ましましたが、この有名なアルゴリズムについても話しました。このアルゴリズムは、建築家や特定の分野の専門家との間の現在の距離が無限であることを示しています。彼らはそれを最初に心に留めています。何か得られるものがある。いわゆる現実的なアプローチとは、現実的な目標を追求することではなく、手の届く範囲、目に見えるもの、身の回りにあることを現実的に行うことを意味します。私が働き始めて地元から出てきたときは、技術の専門家になろうとは思っていなかったし、自分のブログがこれほど影響力を持つとは思ってもいなかったことを今でも覚えています。物事に関して言えば、目にした技術は何でも学ぶだけです。 . 学んでいくうちに、もっと楽に学ぶ方法と、より確実に学ぶ方法が分かってきます。

多くの友人が、C++ を学びたいのかと、Python や Ruby を学びたいのと、フロントエンドを学ぶ必要はないのかと尋ねます。これらの友人たちは、複数の言語を学ぶことは不可能であり、一度覚えたら忘れてしまう、そして彼らには専門分野があると私に言いました。それは悪いことではありませんが、個人的には何かを学ぶ必要はないと感じています。 学習していない状態と習得している状態の 2 つしかありません。テクノロジーを理解するのにそれほど時間はかかりません。実際、C++ を学ぶ目的は、Java をより深く理解することであり、ソケット プログラミングをより深く理解することです。 C/C++/Unix や /TCP などの基本的なテクノロジをよく学んだので、他のテクノロジへの道のりが短縮されたことがわかりました (これが、Go 言語を 2 日で理解できる理由です)。このアルゴリズムと同じで、最初は目的地に到達するまでに時間がかかり、多くの場所を訪れましたが、これが最短の道なのかもしれません。

アルゴリズムはトレードオフです

欲しいものをすべて手に入れることは不可能です。どんな選択も諦めることを意味します。何かを手に入れたいときは、常に何かを諦める必要があります。人生は本質的にシーソーです。一方の端が上昇すると、もう一方の端は下降する必要があります。これは、ソフトウェア設計やアルゴリズム設計を行うときと同じで、時間を空間と交換し、空間を時間と交換し、CAP 理論を行うのと同じです。このフレーズの本来の意味と同じように、常に多くのトレードオフが存在します。何かと交換するには、ある種の何かを使用する必要があります。

私たちは皆、自分の努力を利用する人、自分の考え方を利用する人、自分の自由を利用する人、自分の価値観を利用する人もいます。 、ある人は自分の道徳を使用します... ...ある人はお金を交換し、ある人はビジョンを交換し、ある人は経験を交換し、ある人はステータスを交換し、ある人は交換します能力を交換する人、ある人は自由を交換します、ある人は交換します興味を交換する人もいれば、虚栄心を交換する人もいます... ...

誰もが独自のアルゴリズムを持っており、それぞれのアルゴリズムには独自の目的があります。たとえ全員が同じアルゴリズムを使用していても、全員のアルゴリズム内の変数、スイッチ、条件が異なるため、得られる結果も異なります。 。私たちはマトリックスの中で生きている単なるプログラムであり、それぞれのアルゴリズムが私たちの選択を決定し、私たちの選択が私たちの人生を決定します。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。