古典的なJavaアルゴリズムの筆記試験問題を分析する

古典的なJavaアルゴリズムの筆記試験問題を分析する

Java アルゴリズム プログラムに関する質問:

同社には筆記試験問題が 1 つだけあり、10 分以内に完了する必要があります。

トピックは次のとおりです。1、2、2、3、4、5 の 6 つの数字を使用して、512234、412345 などのさまざまな配置をすべて出力するメイン関数を Java で記述します。要件は、「4」を 3 番目の位置に配置できないことと、「3」と「5」を接続できないことです。

Javaアルゴリズムの基本的な考え方:

1 問題をグラフ構造のトラバーサル問題に縮小します。実際、6 つの数字は 6 つのノードです。6 つのノードを無向接続グラフに接続し、各ノードについてこのグラフのトラバーサル パスを見つけます。すべてのノードのトラバーサル パスは、これらの 6 つの数字の順列と組み合わせの結果セットです。

2 明らかに、この結果セットはまだ質問の要件を満たしていません。次の点を考慮してください。

1. 3 と 5 は接続できません: 実際の要件は、この接続グラフのノード 3 と 5 は接続できないことです。この条件は、グラフ構造を構築するときに満たされ、その後グラフをトラバースできます。

2. 重複なし: 2 が 2 つあることを考慮すると、重複する結果が存在することは明らかです。結果セットを TreeSet に配置して、重複する結果を除外することができます。

3. 4 は 3 番目の位置には存在できません。それでも、結果セット内でこの条件を満たす結果は削除されます。

グラフ構造は 2 次元配列を使用して定義されます。最適なコードは次のとおりです。

  1. java.util.Iterator をインポートします。
  2. java.util.TreeSet をインポートします。
  3.  
  4. パブリッククラスTestQuestion{
  5.  
  6. プライベートString[] b =新しいString[]{"1", "2", "2", "3", "4", "5"};
  7. プライベート int n = b .length;
  8. プライベートboolean[]訪問=新しいboolean[n];
  9. 訪問済み= false ;
  10. プライベートint[][] a = new int[n][n];
  11. プライベート文字列結果= "" ;
  12. プライベート TreeSet TreeSet = new TreeSet();
  13.  
  14. パブリック静的voidメイン(String[] args) {
  15. 新しい TestQuestion().start();
  16. }
  17.  
  18. プライベートvoid start() {
  19. (int i = 0 ; i <   n ; i++) {
  20. (int j = 0 ; j <   n ;j++){
  21. もし( i == j){
  22. 0 の場合
  23. } それ以外 {
  24. 1 は 0 です。
  25. }
  26. }
  27. }a[3][5] = 0;
  28. a[5][3] = 0;
  29. (int i = 0 ; i <   n ; i++) {
  30. this.depthFirstSearch(i);
  31. }
  32. イテレータit = set .iterator();
  33. (it.hasNext()) の間 {
  34. 文字列string = (文字列) it.next();
  35.  
  36. (文字列のインデックスが「4」の場合!= 2){
  37. System.out.println(文字列);
  38. }
  39. }
  40. }
  41.  
  42. プライベートvoid depthFirstSearch(int startIndex) {
  43. 訪問[開始インデックス] = true;
  44. 結果結果= 結果 + b[開始インデックス];
  45. (結果の長さ() == n)の場合{
  46. TreeSet .add(結果);
  47. }
  48. for(int j = 0 ; j <   n ;j++){
  49. a[開始インデックス][j] == 1 && 訪問[j] == falseの場合{
  50. 深さ優先検索(j);
  51. } それ以外 {
  52. 続く;
  53. }
  54. }
  55.     結果result = result.substring(0, result.length() -1);
  56. 訪問[開始インデックス] = false;
  57. }
  58. }
  59.  

注: 非常にイライラしたので、書き出すのに 30 分以上かかりました。私は今でもプロンプトを読んでいます!!! 無向グラフは、データ構造を学んでいたときには好きではありませんでした。

<<:  JSPフォーラムツリー構造を実装するための特定のアルゴリズム

>>:  ガベージクリーニングは必須 - Java ガベージコレクションアルゴリズム

推薦する

人工知能と拡張現実はオンラインショッピング行動に影響を与える

[[405357]]画像ソース: https://pixabay.com/images/id-468...

OpenAIを去った偉人カパシ氏は「教え始めた」。おなじみのミニコードスタイルのまま、新しいプロジェクトが日々増えている。

偉大なカルパシー氏はOpenAIを辞任し、当初は1週間の休暇を取ると脅していた。写真しかし、瞬く間に...

汎用聴覚AIのロックを解除します!清華大学電子工学部とVolcano Voiceが共同で新しい認知指向の聴覚言語モデルをオープンソース化

最近、清華大学電子工学部と Volcano Voice チームが協力して、認知指向のオープンソース聴...

IBMは「キーポイント分析」技術でProject Debaterの機能をさらに向上

[51CTO.com 速訳] IBMは、人工知能技術を使って人々の意見を要約することを目指すProj...

人工知能のための機械学習アルゴリズムシステムの概要

[[198836]] CCAI 2017に参加した後、専門家の講演を聞いて多くの恩恵を受けました。私...

人工知能とセキュリティ:繋がる双子

何十年もの間、セキュリティは重要であると考えられてきましたが、いわゆる「コアビジネス」機能に関与した...

AIはインフラの応用と開発を定義する

人工知能は、データセンターのリソース管理において前例のない役割を果たしています。 AI テクノロジー...

次世代言語モデルパラダイム LAM が登場します! AutoGPTモデルがLLMを席巻、計画、メモリ、ツールの3つの主要コンポーネントの包括的なレビュー

ChatGPT によって開始された AI の波は私たちを人工知能の時代へと導き、言語モデルは日常生活...

システム統合における10の将来のトレンド

システム統合は、ソフトウェア システム、情報システム、エンタープライズ システム、モノのインターネッ...

Python コードを書くことができる人工知能 Kite が Linux のサポートを発表。プログラマーは職を失うことになるのでしょうか?

[[264788]]プログラマーが Python コードを書くという反復的な作業を軽減するのに役立...

...

...

Huawei Cloud Tianchou AI Solverが世界人工知能会議で最高賞を受賞

7月6日、 2023年世界人工知能会議(WAIC 2023)が上海で開幕し、同会議の最高賞である「優...

失業は避けられないのでしょうか? AI時代、人類が将来やるべきことは2つだけ

Sinovation Venturesの李開復氏は「2017年中国企業100%年次大会」で講演し、「...

ディープ ニューラル ネットワークを構築するための 20 の「未熟な」ヒント

当社の機械学習ラボでは、数多くの高性能マシンで何万時間ものトレーニングを行って豊富な経験を蓄積してき...