Python 実用コード - 無限分類ツリー構造生成アルゴリズム

Python 実用コード - 無限分類ツリー構造生成アルゴリズム

バックエンド開発者にとっては、無限レベルの分類に強い印象を受けたのではないでしょうか。最初はかなり時間がかかったのではないでしょうか。

無限分類ツリー構造の応用シナリオは多数あります。たとえば、バックエンド開発では、ユーザーの関連権限を読み取ってツリー構造を生成する必要があります。フロントエンド開発で権限ツリーを取得したら、構造に従ってユーザーがアクセスする権限を持つ列を表示できます。別の例として、Web ページの列分類があります。

著者も、最初にツリー構造を生成する必要に迫られたとき、頭を悩ませました。その後、コードが少なく、明確で理解しやすい生成アルゴリズムを見つけました。それは、再帰です。

まず、データベースに保存されているカテゴリ情報が次のとおりであることを確認します。

  1. [
  2. { "id" : 1 , "name" : '電化製品' , "parent" : 0 },
  3. { "id" : 2 "name" : 'フルーツ' "parent" : 0 },
  4. { "id" : 3 , "name" : '家電製品' , "parent" : 1 },
  5. { "id" : 4 , "name" : 'ヘアドライヤー' , "parent" : 3 },
  6. { "id" : 5 , "name" : '扇風機' , "parent" : 3 },
  7. { "id" : 6 , "name" : 'テーブルランプ' , "parent" : 3 },
  8. { "id" : 7 , "name" : '業務用電化製品' , "parent" : 1 },
  9. { "id" : 8 , "name" : '大型電気鍋' , "parent" : 7 },
  10. ]

親フィールドには、このエントリの親番号が記録されます。たとえば、ヘアドライヤーの親番号は 3 で、ヘアドライヤーは家電製品に属していることを意味し、家電製品の親番号は 1 で、家電製品は電化製品のカテゴリに属していることを意味します。ヘアドライヤーのエントリを電化製品のエントリに関連付ける直接的な識別はありませんが、電化製品 <- 家電製品 <- ヘアドライヤーの関係を示すツリー構造が必要です。

著作権透かし WeChat 公開アカウント Python プログラミング リファレンス

親を通じて親番号を見つけ、関連付け関係を確立する操作は、実際にはすべてのノードが見つかるまで繰り返される操作です。これは再帰アルゴリズムと非常に一致しており、対応する再帰コードは簡単に記述できます。

  1. def generate_tree(ソース、親):
  2. 木 = []
  3. ソース内の項目:
  4. 項目[ "親" ] == 親の場合:
  5. アイテム[ "child" ] = generate_tree(source, アイテム[ "id" ])
  6. ツリーに追加(アイテム)
  7. リターンツリー

データベースに保存されている情報を generate_tree 関数に渡すだけです。この再帰コードは、親を使用して往復ループで子ノードを見つけ、見つけた子ノードをツリーに追加します。完全なコードは次のとおりです。

  1. jsonをインポート
  2. def generate_tree(ソース、親):
  3. 木 = []
  4. ソース内の項目:
  5. 項目[ "親" ] == 親の場合:
  6. アイテム[ "child" ] = generate_tree(source, アイテム[ "id" ])
  7. ツリーに追加(アイテム)
  8. リターンツリー
  9. __name__ == '__main__'の場合:
  10. 権限ソース = [
  11. { "id" : 1 , "name" : '電化製品' , "parent" : 0 },
  12. { "id" : 2 "name" : 'フルーツ' "parent" : 0 },
  13. { "id" : 3 , "name" : '家電製品' , "parent" : 1 },
  14. { "id" : 4 , "name" : 'ヘアドライヤー' , "parent" : 2 },
  15. { "id" : 5 , "name" : '扇風機' , "parent" : 3 },
  16. { "id" : 6 , "name" : 'テーブルランプ' , "parent" : 3 },
  17. { "id" : 7 , "name" : '業務用電化製品' , "parent" : 1 },
  18. { "id" : 8 , "name" : '大型電気鍋' , "parent" : 7 },
  19. ]
  20. permission_tree = generate_tree(permission_source, 0 )
  21. print(json.dumps(permission_tree、ensure_ascii=False))

実行してみて、構造が期待どおりであるかどうかを確認してください。

キャッシュ最適化アルゴリズムの使用

再帰アルゴリズムには繰り返し計算が多く含まれており、余分なリソースを消費するだけでなく、関数の実行効率も低下します。そのため、再帰を最適化する必要があります。ここでは、関数実行の効率を向上させるためにキャッシュ最適化方式が使用されます。

基本的な考え方は、このエントリの番号をリストに追加し、ノード関係が見つかるたびにそれをキャッシュして、このエントリに対してノード関係が見つかったことを示すことです。関数を実行する往復ループ内でこのエントリが再度検出された場合は、スキップできます。コードの変更は簡単で、キャッシュ リストと制御フロー ステートメントを追加するだけです。

  1. def generate_tree(ソース、親、キャッシュ=[]):
  2. 木 = []
  3. ソース内の項目:
  4. キャッシュ内にアイテム[ "id" ]がある場合:
  5. 続く 
  6. 項目[ "親" ] == 親の場合:
  7. キャッシュに追加(アイテム[ "id" ])
  8. アイテム[ "child" ] = generate_tree(ソース、アイテム[ "id" ]、キャッシュ)
  9. ツリーに追加(アイテム)
  10. リターンツリー

この時点で、無限レベルの分類ツリー構造を生成するアルゴリズムが完成します。学びましたか?

<<:  AIによる売上予測により、組織は不確実性の中でコントロールを獲得できる

>>:  「自然言語処理」とは何ですか? 具体的に何を「処理」するのですか?

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

Weiboはどのように実装されていますか? Weiboの背後にあるアルゴリズム

導入Weiboは多くの人が利用するソーシャルアプリケーションです。毎日Weiboを閲覧する人は、オリ...

...

...

AI投資を最大限に活用するための6つのステップ

人工知能は、将来の発展にとって大きな破壊的技術の 1 つであるとよく考えられています。これにより、多...

古代のLRから始まる初心者でもわかるレコメンデーションアルゴリズム入門

[[386397]]みなさんこんにちは。私は、気づかないうちに長い間、推薦システムに取り組んできまし...

現在人類社会が直面している人工知能のセキュリティ問題!

現在、人類社会が直面している人工知能のセキュリティ問題は、人工知能のアルゴリズムとシステムの特性によ...

Google Bard「叙事詩」アップデート:カスタマイズされた中国語サービス、画像分析機能を公開

今年3月、Googleは生成AI「Bard」のベータ版のリリースを発表しました。当時、このバージョン...

一貫性のあるハッシュは難しいですか?これを読んで全て理解できました

[51CTO.com からのオリジナル記事] この記事では、コンシステント ハッシュとは何か、そして...

AIが臨床試験でスムーズな患者マッチングを実現する方法

新型コロナウイルス感染症のパンデミックは、がんとの戦いにおいて医療界に重要な教訓を浮き彫りにした。そ...

AIによる改ざんサイバー攻撃が迫る

AIによる顔変えの余波はまだ消えず、AIによる声変え電話詐欺劇が現実のものとなりました!ディープフェ...

ポストパンデミック時代に成功するためのコードを習得するには? AIと自動化にも依存している

COVID-19パンデミック以前は、経営幹部は、ビジネス運営の最適化、収益性の向上、イノベーションの...

...

...

...

VRとAI: 融合しようとしている2つの技術

テクノロジーは私たちの生活に常に影響を与えています。社会として私たちはテクノロジーに大きく依存するよ...