私は、コードの問題を解決することによって自分のスキルを高めようとしていました。私はこの1つに達し:https://codility.com/programmers/lessons/9-maximum_slice_problem/max_double_slice_sum/MaxDoubleスライスカダネのアルゴリズムのバリエーションを解決する
私は実際には、理論的に解決策を理解する:アレイ上
- 使用Kadaneのアルゴリズムを、すべての指標で合計を格納します。
- アレイを逆にして同じ操作を行います。
- 一度に両方の結果セットを1つずつループすることによって、両方の合計が最大である点を見つけます。
- maxは最大ダブルスライスです。
私の質問は、この問題の解決方法に関するものではありません。私の質問は、これがこの問題を解決できる方法であると想像する方法についてです。使用なされる必要があるで、少なくとも3種類の概念があります。
は、アレイ内のすべての要素が正、または負の場合、それはいくつかの正と負があるときとは異なる場合があることを理解配列内の要素Kadaneのアルゴリズム
は、前方アレイの上に行くと逆転しました。
これにもかかわらず、Codalityはこの問題を「痛い」とタグ付けしています。
私の質問には何か不足していますか?これらの概念のいくつかを知らなくてもこの問題を解決することは難しいようです。
私はゼロから始め、非常に基本的なコンセプトから始めることができ、この問題を解決するために必要なコンセプトに到達するための手法はありますか?それとも、問題を開始する前にこれらの概念を知っていると予想されますか?
今後の必要な概念がわからないような問題を解決するために自己を準備するにはどうすればよいですか?
ありがとうございました。あなたは、まずスライスを三つ組(x、y、z)として定義します。これは、x + 1から始まり、z-1で終わり、yを含まない要素の合計で定義されます。 配列が2、3、4、5、6、7の場合、maxサブ配列は配列全体です。そして、反転された最大サブアレイもまたアレイ全体である。したがって、最初の要素と最後の要素を削除するという上記の要件を考慮しません。 (または何かを正しく理解していないのですか?) これは一般的なalgoが処理しない特殊なケースではありませんか? –
@KhojBadamiどのように表示されません。オリジナルの定義と単純化された定義を適用すると、その例の答えはあなたによると、何ですか?いずれにしても、何とかそれが間違っていても、ほとんどの場合は機能し、いくつかのエッジケースを出したり、解決したりするというソリューションがあります。ここでは、これらのエッジケースを処理する方法に焦点を当てることができます。それらを個別に識別して処理するか、ソリューションを処理して処理できるようにします。エッジケースから開始してソリューションの開発を開始しないでください。 – IVlad
さて、「エッジケースから始めて解決策を開発しないでください」。これが私の問題だと思うことです。あなたが元々言っていたように、私は質問がより複雑になっています。あなたが説明したように単純化する必要があります。ありがとうございました。 –