データ構造とアルゴリズムの8シリーズ(再帰的な贈り物)

1.プライマー

1.1。なぜ、データ構造とアルゴリズムを学びますか?

一部の人々は、データ構造とアルゴリズム、コンピュータネットワークを言うと、オペレーティングシステムは、おそらくあまりそれよりも、この生活の中でインタビューに加えて、日々の開発から、同じです!

一部の人々は、最大「飛ぶ」ことができないコードを書く、私は熟練したAPI、熟練フレームワーク、ミドルウェアの熟練した多様な限り、事業展開を行うことを言うの?

なぜデータ構造とアルゴリズム、それを学ぶ:ある質問だから?

#一つの理由:
    インタビューは、データ構造ではなく、アルゴリズムは、ドラッグ
#二の理由を:
    あなたは本当に永遠にCRUDボーイそれをやりたい
#スリーの理由:
    優れたオープンソースのフレームワーク、ミドルウェアエンジニア、ないを書きたくありませんクック

1.2どのように体系的な学習データ構造とアルゴリズム?

私はまだ、データ構造とアルゴリズムを研究する必要がある、よく考えました。しかし、私は、2つの混乱があります。

それについて移動する方法を学びます。1.?

2.何を学びたいのですか?

推奨学習:

#学ぶ
 1 。、地面から系統的な研究をアップ
 2つのより実践的なデータ構造とアルゴリズムの各タイプは、コード内で自分のアウトを達成するためにある。
 3つのアイデアがより重要である:イデオロギーの理解を達成するために、コードにしないでください
 4を日々開発と組み合わせます。対応するアプリケーション・シナリオ

コンテンツ推薦を学びます:

データ構造とアルゴリズムより多くのコンテンツ、我々の実用的な原則で、古典、一般的に使用されるデータ構造とアルゴリズムを学習一般的に使用されます

#学習コンテンツ:
 。データ構造が定義されている
 2 。定義されたアルゴリズム
 3 。複雑分析
 4つの共通データ構造
    アレイ、リンクリスト、スタック、キュー、
    ハッシュテーブル、バイナリツリー、ヒープ
    。ジャンプテーブル、図5 の一般的なアルゴリズム
    を再帰的に、並べ替え、バイナリサーチ
    検索、ハッシュ、貪欲、分割統治の
    動的プログラミング、文字列マッチング

2.テストあなたの知識

これまでのところ、我々は読んだことがある線状、簡単な審査のデータ構造に基づいて、それらは:配列、連結リスト、スタック、キュー。このデータ構造は、に焦点を当てる必要があります他のデータ構造とアルゴリズムの基礎です。

これは、私たちがあなたのシートベルトを締めてください、アルゴリズムを訓練回し、スタートです!最初は、アルゴリズムに依存している:再帰あなたは非常に精通している必要があり再帰言葉は、ありますか?

ない場合は、の例をあげてみましょう。2016年から現在まで、知識の開発が本格的に支払われます。あなたはXX XXプラットフォームコースの購入で例えばそのうちの一つ、ある場合。あなたは、コース外のシェアを購入するほとんどのプラットフォームでは、あなたを教えてくれる誰かがあなたの共有リンクを介してコースを購入した場合、その後、プラットフォームはあなたの現金バック手数料を与えるだろう。

お金との関係は、それはあまりにも面倒です!プラットフォームについては、把握する必要があり、いくつかの問題があります。例えば:1. 1人は誰をお勧めしますか?

二審判である2 ......?

3.究極の審判は誰ですか?

審判の異なるレベル、現金バック手数料の割合は同じではないので、右ではなく、バック間違った操作を行います。:これは、人々の問題についての提言を求めているに似ている、それはこれです、私たちの今日のヒーローのデビューを持ってください再帰

#再帰もう少し複雑な、我々は2で学ぶ:
 1 。最初の章では、ギフトである:
   1.1 。経験の生活二つの小さな例では
  
2 秒のハイライトです:
   2.1 。再帰的な実装の詳細な分析
   2.2。再帰注意事項

3.ケース

3.1。推奨最終需要

ブリーフ:

1. A コースを購入するために、特定の知識決済プラットフォームで:XX 友人のマイクロチャネル円に共有とリンク

2. B によってコースを購入する共有へのリンク、:XX そして、友人のマイクロチャネルサークルへのリンクを共有

3. C を経由してBの共有へのリンクは、コースを購入する:XXをそして、接続マイクロチャネルは、友人のサークルを共有します

4.そう行く......

5.でいる場合C の開始点として、どのようにコースを見つけるために:xxは、最終的な審判を?

図6は、データベースに格納されたデータがそのようなものであると仮定する。

 

 

解決:

1.あなたは、これは多くの場合、次のコードを記述するように、この問題は、単純で良いと思いますする必要があります。

/**
* 求最终推荐人
*/
public String findRootRecommend(String userId,String xx){
    // 根据购买课程用户id、课程  查询数据库,获取推荐用户id
    String 【分享用户id】 = select 【分享用户id】 from 【购买课程表】 where 【用户id】 = 【userId】 and 【课程id】 = 【xx】;
    
    // 判断是否是根据好友分享购买的课程
    if(分享用户id == null){
        return userId;
    }
    
    // 递归查找
    return findRootRecommend(分享用户id,xx);
}

3.2.电影院看电影

简述:

1.你与女朋友正在电影院看电影,电影已经放映

2.突然,女朋友问你:我们坐在电影院的第几排?

3.你一看,坏了:电影院一片漆黑,伸手不见五指

4.这个问题必须要回答,因为是女朋友问的,你该怎么办?

求解:

1.别忘了,你是程序员,对于程序员来说,这个问题太简单了

2.用递归:先问前一排的人,他们在第几排?

3.前一排的人,再问他的前一排,在第几排?

4.以此类推......

5.一直问到第一排的人,第一排不需要再问了,直接回答在第一排

6.第二排的人:在第一排的人基础上 + 1

7.以此类推......

8.每一排都在前一排的基础上 + 1,最后到了你们这一排,女朋友得到了满意的答案

9.你很骄傲有没有?用代码回答,类似这样:

public int movies(int n){
    // 如果是第一排,返回1
    if(n == 1){ return 1;}
    
    // 递归向前一排询问
    return movies(n - 1) + 1;
}

 

おすすめ

転載: www.cnblogs.com/itall/p/12408767.html