5

面接で尋ねられた、または仕事や教育の一環として説明を求められた可能性のある疑似コードの問題の例を探しています。特定のドメインからの例を探しているわけではないので、設計パターン、アルゴリズム、データ構造、キャッシング戦略、ソフトウェア エンジニアリングと開発に関係するもの、単純または複雑に関係する可能性があります。

たとえば、私が見つけたいくつかの一般的なものは、主に並べ替えと検索の手法に関連しています。

バブルソート

procedure bubbleSort( A : list of sortable items ) defined as:
  do
    swapped := false
    for each i in 0 to length(A) - 2 inclusive do:
      if A[i] > A[i+1] then
        swap( A[i], A[i+1] )
        swapped := true
      end if
    end for
  while swapped
end procedure

挿入ソート:

insertionSort(array A)
begin
    for i := 1 to length[A]-1 do
    begin
        value := A[i];
        j := i - 1;
        done := false;
        repeat
            if A[j] > value then
            begin
                A[j + 1] := A[j];
                j := j - 1;
                if j < 0 then
                    done := true;
            end
            else
                done := true;
        until done;
        A[j + 1] := value;
    end;
end;

二分探索:

   BinarySearch(A[0..N-1], value, low, high) {
       if (high < low)
           return -1 // not found
       mid = low + ((high - low) / 2)
       if (A[mid] > value)
           return BinarySearch(A, value, low, mid-1)
       else if (A[mid] < value)
           return BinarySearch(A, value, mid+1, high)
       else
           return mid // found
   }

多くの人が自分の考えや経験を共有してくれれば、疑似コードのアルゴリズムと問題のまともなリストを作成できるかもしれません。

練習として、自分で疑似コード表現を考え出そうとしています。したがって、疑似コードの例が見つからなくても、この方法で表現するのが理想的な概念だと思う場合でも、それは役に立ちます。

また、件名に関連するいくつかの質問もあります。

  • 以前にインタビューで書くように頼まれた疑似コードはどれですか?
  • これらの質問は、関数の長さが 1 つまたは 2 つの短く単純なアルゴリズムに関連する傾向がありますか?
  • 疑似コードを書くときに言語固有の構造を避けるべきですか? 表現は言語に依存しないことを意図しているため、各言語に存在しない Dispose や foreach などの用語を使用しない方が安全ですか?

ありがとう


編集:

私が見つけたさらにいくつかの例をいくつか見つけました。さらに見つけたら編集を続けます。


単語を逆にするのではなく、文内の単語の順序を逆にする単一の文字列を取る関数を作成します。

入力: 「猫は別の猫と一緒にマットの上に座っていました!」

出力: 「ねこ!もうひとつマット付き、その上に座ったねこ」


大文字と小文字、句読点を無視して、その文字列内で最も多く出現する単語を返す単一の文字列を受け取る関数を作成します。複数の単語の出現回数が同じ場合、最初に出現した単語を返します。

入力: 「猫は別の猫と一緒にマットの上に座っていました!」

出力:


大文字と小文字を区別せずに、特定の文字列内で出現回数が最も多い文字を見つける関数を作成します。出現頻度が等しい文字が複数ある場合は、文字列内で最初に出現した文字を返します。

入力:「キャラクター」

出力: c


文字列を逆にする関数を書く

入力:「逆」

出力: "esrever"

4

5 に答える 5

3

まだ質問されたことはありませんが、古典的な FizzBu​​zz の質問があります。

1 から 100 までの数字を出力するプログラムを作成してください。ただし、3 の倍数の場合は数字の代わりに "Fizz" と出力し、5 の倍数の場合は "Buzz" と出力します。3 と 5 の両方の倍数の場合は、"FizzBu​​zz" と出力します。

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html にあるよう

これは簡単な選別用の質問であり、非常に新しいプログラマーにさえ重大な困難をもたらすものではありません。

于 2010-08-15T10:58:23.903 に答える
2

数年前のインターンシップの面接で、このための疑似コード ソリューションを作成するように依頼されました。

ディレクトリ パスを指定して、そのディレクトリとすべてのサブディレクトリに含まれるファイルの総数をカウントできるアルゴリズムを作成します。

これを解決できるということは、ツリー トラバーサルを理解していることを示しています。

于 2010-08-20T12:22:40.390 に答える
1

私自身は面接で疑似コードを書くように頼まれたことはありません (まだ学生です) が、夏の仕事のために Google に応募した私の友人は、正規表現のサブセットを処理できる正規表現パーサーを書くように頼まれました ( iirc、英数字入力のみ、*、+、および {x,y} 表記を使用)。私は来年夏の仕事のために彼らに応募することを考えており、その場でそのようなものを書こうとする考えに恐怖を感じています.XD.

彼は、相互に再帰する 2 つの関数を使用してそれを解決したと思います。方法がわからない。

ああ、彼はこのための疑似コードを書くように求められただけではありません。彼は、その場でコンパイルする実際の C++ コードを書くように求められました。(Google ドキュメント ドキュメントでも)。

于 2010-08-15T10:57:46.433 に答える
0

それを理解するのに長い時間がかかりましたが、これが私の Excel VBA の文反転問題に対する解決策です。

Public Sub SentenceReverse()

Dim InSentence As String 'Input sentence string
Dim OutSentence As String 'Output sentence string
Dim p As Integer 'Word Start
Dim q As Integer 'Word length

p = 1

InSentence = ActiveSheet.Range("A1").Value 'Assign the sentence to a string

For i = 2 To Len(InSentence) + 1 'Loop through all the characters of the input sentence
    If (Mid(InSentence, i, 1) = " " Or i = Len(InSentence) + 1) Then 'This character is a space or this is the the end of the sentence
        q = i - p 'Set the word length to the number of this position minus the position of the start of this word
        OutSentence = Mid(InSentence, p, q) & " " & OutSentence 'Add this word to the start of the output string
        p = i + 1 'Set the start of the next word as the position of this space + 1
    End If
Next i

MsgBox (OutSentence)

End Sub
于 2015-07-12T18:22:51.613 に答える
0

これが最もエレガントなアプローチかどうかはわかりませんが、最も頻繁に出現する単語を見つけるための解決策を次に示します。これが私がそれにアプローチした方法です。

  1. 文をループして単語数を見つけ、スペースが見つかった場合、または文の終わりに達した場合は、単語カウント変数を増やします。この長さの単語配列を作成します。
  2. 各単語の開始に 1 つの変数を使用し、各単語の長さに別の変数を使用して、文を再度ループし、先行する文字を単語配列の要素に割り当てます。
  3. 単語配列要素ごとに、単語配列の各要素をループして比較します (ネストされたループ)。一致する場合は、各単語の出現回数を示すカウント配列のその位置の値を増やします。
  4. count 配列をループし、各フィールドの値をこれまでに見つかった最大値と比較します。これにより最大数が得られ、したがって最も一般的な単語が得られます。その単語を出力します。

    Public Sub FindCommonWord()

    Dim Insentence As String Dim WordArray() As String Dim CountArray() As Integer Dim p As Integer 'Word Start Dim q As Integer 'Word length Dim w As Integer 'Word Count Dim tw As String 'This Word Dim R As Integer 'Position最も一般的な単語の

    p = 1 w = 1

    Insentence = ActiveSheet.Range("A1").Value '文を文字列に代入

    'すべての文字をループして単語数をカウント For h = 2 To Len(Insentence) + 1 '入力文のすべての文字をループ If (Mid(Insentence, h, 1) = " " Or h = Len( Insentence) + 1) Then 'この文字はスペースまたは文末 w = w + 1 End If Next h

    w = w - 1

    ReDim WordArray(w) ReDim CountArray(w)

    w = 1 'すべての文字をループし、単語を配列の要素に割り当てます For i = 2 To Len(Insentence) + 1 '入力文のすべての文字をループします If (Mid(Insentence, i, 1) = " " Or i = Len(Insentence) + 1) Then 'この文字はスペースか、これは文の終わりです q = i - p '単語の長さを、この位置の数からこの文字の開始位置を引いた値に設定しますword WordArray(w) = Mid(Insentence, p, q) p = i + 1 '次の単語の位置 w = w + 1 '次の単語 End If Next i w = w - 1 '最後の単語に到達

    '配列をループして各単語を処理する For j = 1 To w '配列をループして、この単語が出現する回数をカウントする For k = 1 To w If UCase(WordArray(k)) = UCase(WordArray(j )) 次に CountArray(j) = CountArray(j) + 1 次の k 次の j

    R = 1

    'カウント配列の最大値を見つける For n = 1 To w If CountArray(n) > R Then R = n Next n MsgBox ("最も一般的な単語は " & WordArray(R) & " in position " & R & ".")

    サブ終了

于 2015-07-12T19:58:17.647 に答える