はじめに
エンジニアの開発効率を向上させるために、昨今多くの会社で生成AIを導入する動きが見られます。
その中で、自社で開発したソースコードを生成AIに直接入力することは、知的財産の漏洩やセキュリティ上のリスクを発生させる懸念があります。
そこで本記事では、ソースコードを直接貼り付けずにAIにコードのパフォーマンスを改善してもらう方法の中で、擬似コードを使用した方法について紹介します。
擬似コード化
実際のコードではなく、擬似コードを使用して問題を説明します。擬似コードは、実際のプログラミング言語の構文に縛られず、アルゴリズムやプログラムのロジックを簡潔に表現するのに適しており、セキュリティリスクを抑えることができます。
例えば、以下のようなソースコードがあるとします。
ソースコード(ChatGPTによる例):
def remove_duplicates(my_list): no_duplicate_list = [] for element in my_list: if element not in no_duplicate_list: no_duplicate_list.append(element) return no_duplicate_list
このソースコードの、特定のリストから重複要素を削除するアルゴリズムを最適化しようとしているとき、以下のような手順でソースコードを擬似コード化し、質問をして回答を得ます。
擬似コードの作成ステップ:
1. アルゴリズムのロジックの抽出:
実際のコードから基本的なロジックを特定し、これをより一般的な言葉で説明します。このケースでは、remove_duplicates関数がmy_listから重複する要素を取り除いています。
具体的な言語の構文の排除: Pythonの特定の構文(forループ、if文など)を使用せず、その代わりに一般的な命令や手順を用いてロジックを記述します。
変数名とデータ構造の一般化: コード内の特定の変数名(my_list, no_duplicate_listなど)を、その役割を示す一般的な名前に変更します。
擬似コード(ChatGPTによる例):
関数 REMOVE_DUPLICATES(リスト) 初期化 空の新しいリスト 繰り返し 各要素に対して in 元のリスト もし 要素が新しいリストになければ 追加 要素を新しいリストに 返す 新しいリスト
質問の仕方(例):
リストから重複要素を削除する効率的な方法について教えてください。上記の擬似コードを参考にしています。このアプローチを改善する方法はありますか?
AIによる回答(ChatGPT):
上記の擬似コードは、リストから重複要素を削除する基本的なアプローチを示していますが、この方法は特に大きなリストに対しては効率が良くありません。なぜなら、各要素が新しいリストに含まれているかどうかを確認するのに時間がかかるからです。これを改善するには、次のような方法が考えられます。
改善案 1: ハッシュセットを使用
1. アルゴリズム:
・ 初期化:空のハッシュセット
・ 繰り返し:各要素に対して元のリストで
・ ハッシュセットに要素を追加
・ ハッシュセットをリストに変換して返す
2. Pythonでの実装例:
def remove_duplicates(lst): return list(set(lst))
この方法の利点は、ハッシュセットが要素の存在確認を平均的にO(1)の時間複雑度で行えるため、全体の処理が高速になる点です。ただし、元のリストの順序は保持されません。
改善案 2. 順序を保持する方法
もし元のリストの順序を保持することが重要な場合は、ハッシュセットを使いつつ、順序を保持する方法を採用します。
1. アルゴリズム:
・ 初期化:空のハッシュセットと新しいリスト
・ 繰り返し:各要素に対して元のリストで
・ もし要素がハッシュセットになければ
・ 要素をハッシュセットと新しいリストに追加
・ 返す新しいリスト
2. Pythonでの実装例:
def remove_duplicates(lst): seen = set() new_lst = [] for item in lst: if item not in seen: seen.add(item) new_lst.append(item) return new_lst
この方法は元のリストの順序を保持しつつ、重複を効率的に削除します。各要素の存在確認はハッシュセットを使用するため、高速です。
これらの方法によって、リストから重複要素を効率的に削除することができます。どの方法を選択するかは、順序の重要性や処理速度の要求によって異なります。
このように、擬似コードを使用することで、実際のコードの詳細を隠しながら、アルゴリズムのロジックに関するフィードバックや改善提案を求めることが可能です。これは、特に機密性が高いプロジェクトや、特定の言語や環境に依存しない一般的なアドバイスを求める場合に役立ちます。
その他の手法はこちらです。
コードの一般化:https://tech.kurojica.com/archives/59975/