目次
ディスカッションに返信(解決策)
ホームページ バックエンド開発 PHPチュートリアル アルゴリズムを聞いてください! !

アルゴリズムを聞いてください! !

Jun 23, 2016 pm 02:24 PM

既存の範囲があります: $start--$end (例: 5--10)。
変数 $param を与えます:
If $param If $param>$end , then $param=$end
if else、三項、その他の論理アルゴリズムは必要ありません (ただし、シンプルで効率的です)
この要件を達成するための数学的アルゴリズムを探しています


ディスカッションに返信(解決策)

理解できません

このアルゴリズムは存在しません(比較を使用しません)。言語では、ビット操作の高速化については考えません。

たとえ存在するとしても、2 つの乗算と 1 つの除算が含まれている必要があります。この時間は if - else に相当します。

つまり、それは存在しません。

例: 5--10 (x-y)
a=x-z
b=y-z

aは0より大きく、bは0より大きいため、判定番号は1(z)
とする。したがって、z=x=5となります。


判定番号が 11(z) だとします
a は 0 未満であり、b は 0 未満であるためです。したがって、z=y=10となります。


判定番号が 6(z) であるとします
a は 0 より小さく、b は 0 より大きいためです。それでうまくいきません。


痛いです

or とヘテロモジュラー丸めのさまざまな組み合わせを試しましたが、本当に答えが得られません
このアルゴリズムを実装する可能性について議論しましょう

投稿者はアルゴリズムを求めましたが、これは実際には存在しません= _=...

このアルゴリズムは存在しません (比較を使用しません)。インタープリタ型言語の場合、ビット演算によって速度が向上するとは考えてはいけません。

たとえ存在するとしても、2 つの乗算と 1 つの除算が含まれている必要があります。この時間は if - else に相当します。

つまり、それは存在しません。

公式自体はおそらく存在します。判断はできません
ただし、実際には非常に高速な公式はありません。私が推測したところ、乗算/除算演算を使用する必要があることがわかりました。

なぜ私の 4 階が飲み込まれたのでしょうか

私も計算を色々組み合わせてみましたが、結果は得られませんでした
実装の可能性について議論しましょう

導出過程を調べてください
計算式自体はおそらく存在します。判断はできません
ただし、実際には非常に高速な公式はありません。私が推測したところ、乗算/除算演算を使用する必要があることがわかりました。

x = 5 (y x = y (y は区間 [5,10] 内にあります)
x = 10 (y >= 10)
---------- --------------------------------------------------
オーナー 座標図を描きます。これは基本的に稲妻の形をした曲線に相当します (下の図)。幾何学を勉強したとき、このような曲線方程式を見たことはありません。 。
| ?

a,b E [5,10]
x=a+1;
and a には大きな価値があるとは思えません....


それは可能であるはずですPHPでやろう!

私は数学が苦手なので、分割しないと (つまり if を使わずに) f(x) を解く方法は、今のところ思いつきません。数学の皇帝を待つだけです。 ...

min と max を使用するのはそれほど簡単ではありません。
そうです
以上です。

確かに。最小値もあれば最大値もあります...

皆さん、続けてください。 。


また勉強になりました

でもよく考えてください、最大最小メカニズムは論理演算を使用して内部で実装されるべきです


夢想家を目覚めさせる言葉
function getnum($param, $start, $end)

{

$min = min($param, $start, $end);

$max = max($param, $start, $end);

if ($min == $param)
{
$param = $min ;

if ($max == $param)
{
$param = $max;

}


return $param; }

min と max を使うのは非常に簡単ではないでしょうか。
PHP コード
$param = 4;
echo min(max($param,5),10); 以上です。


=_=...
foolbirdflyfirst有码了啊。你还写

一语惊醒梦中人啊
function getnum($param, $start, $end)
{
$min = min($param, $start, $end);
$max = max($param, $start, $end);

if ($min == $param)
{
$param = $min;
}

if ($max == $param)
{
$param……

好歹尊重一下别人的劳动的成果嘛


=_=...
foolbirdflyfirst有码了啊。你还写

引用 21 楼 jasmine_xiaocao 的回复:

一语惊醒梦中人啊
function getnum($param, $start, $end)
{
$min = min($param, $start, $end);
$max = max($param, $start, $end);

if ($mi……

这位同学,你跑题严重啊 呵呵~~
好歹尊重一下别人的劳动的成果嘛

引用 22 楼 ci1699 的回复:

=_=...
foolbirdflyfirst有码了啊。你还写

引用 21 楼 jasmine_xiaocao 的回复:

一语惊醒梦中人啊
function getnum($param, $start, $end)
{
$min = min($param, $start, $end);
……


楼主什么意思???
这位同学,你跑题严重啊 呵呵~~
引用 23 楼 jasmine_xiaocao 的回复:
好歹尊重一下别人的劳动的成果嘛

引用 22 楼 ci1699 的回复:

=_=...
foolbirdflyfirst有码了啊。你还写

引用 21 楼 jasmine_xiaocao 的回复:

一语惊醒梦中人啊
function getnum($param, $start,……

题目说了不能用if else 的哦 亲~ 楼主什么意思???
引用 24 楼 mr_merlin 的回复:

这位同学,你跑题严重啊 呵呵~~
引用 23 楼 jasmine_xiaocao 的回复:
好歹尊重一下别人的劳动的成果嘛

引用 22 楼 ci1699 的回复:

=_=...
foolbirdflyfirst有码了啊。你还写

引用 21 楼 jasmine_xiaocao 的回复:

一语惊醒梦……

这样用也不行??那我错了。。。。

题目说了不能用if else 的哦 亲~引用 25 楼 jasmine_xiaocao 的回复:
楼主什么意思???
引用 24 楼 mr_merlin 的回复:

这位同学,你跑题严重啊 呵呵~~
引用 23 楼 jasmine_xiaocao 的回复:
好歹尊重一下别人的劳动的成果嘛

引用 22 楼 ci1699 的回复:

=_=...
foolbirdflyfir……

可以用min,max不是很简单?
PHP code
$param = 4;
echo min(max($param,5),10);

就行了吧。
不错,如果不可以用min,max呢?

看了半天没想出来 
看来我的算法水平差的没法 

学习学习

function foo($a, $b, $c) {	Return (((($c-$a) + (($c-$a)  >> 31)) ^ (($c-$a) >> 31)) - ((($c-$b) + (($c-$b)  >> 31)) ^ (($c-$b) >> 31)) + $a + $b) / 2;}echo foo(20, 30, 50);  // 30
ログイン後にコピー

这没用任何函数拉。
我去求经得到的,
算法有待研究。

用abs的话就简单明了了

引用 17 楼 foolbirdflyfirst 的回复:

可以用min,max不是很简单?
PHP code
$param = 4;
echo min(max($param,5),10);

就行了吧。

不错,如果不可以用min,max呢?
我也不知道。。。#30的人才啊。哈哈

我也不知道

分别将 所求数 转化为 下界 进制数 和 上界 进制数,
所求结果 为

example : (5,10,x) x=8
x1 = 13(mod5)
x2 = 08(mod10)
answer = (x1msb ⊙ x2msb)*(x1msb*5+x2msb*10)+(x1msb xor x2msb)*x

这里的x1msb x2msb需要进行 高位整数除法处理后的结果 才能得到二进制的 0,1

楼主威武,不知道你在想什么

观望中。。。。

路过学习。

有这样实现的算法?

x = 5 (y <= 5)
x = y (y在[5,10]区间)
x = 10 (y >= 10)
------------------------------------------------------------
楼主画个坐标图,基本相当于闪电模样的一个曲线(下图),学几何的时候没见过这种曲线方程。。
|
|
|
/(10)
/
/
|(5)
|
|
|
|

如9楼所言,如果楼主要的是数学算法的话,这种
?? ?? ?? ?? ?? ?? ??
/
/
/
/
/
?? ?? ?? ?? ?? ?? ??
类似的函数曲线还真是没见过啊,
只能是分段函数了,分为三段,这样貌似就得用if else了。

额- -我的图怎么变成这样子了。。。。
那个曲线就是类似于Z的Y轴对称图形,这样子应该只能是分段函数了吧?因为它一点也不圆滑是有死角的
引用 9 楼 foolbirdflyfirst 的回复:

x = 5 (y <= 5)
x = y (y在[5,10]区间)
x = 10 (y >= 10)
------------------------------------------------------------
楼主画个坐标图,基本相当于闪电模样的一个曲线(下图),学几何的时候没见过这种曲线方程。。
|
|
……

public static int get(int start, int end, int param)        {            param -= start;            param &= (int)(((uint)param) >> 31) - 1;            param += start;            param -= end;            param &= (int)((((uint)param) >> 31) ^ 1) - 1;            return param += end;        }        public static int get1(int start, int end, int param)        {            return new int[] { end, param, start, start }[(((uint)(param - start) >> 30) & 2) | ((uint)(param - end) >> 31)];        }
ログイン後にコピー

用符号位只能算正数,否则要将int扩展到long

不知道这个是不是楼主想要的。

int foo(int start, int end, int param){	int tmp[2];	tmp[0] = param;		tmp[1] = start;	param = tmp[(param-start)>>(sizeof(int)*8-1)];	tmp[1] = end;	param = tmp[(end-param)>>(sizeof(int)*8-1)];	return param;}
ログイン後にコピー

param = ((start+end)-abs(start-end))/2, 其中abs()为取绝对值运算。

param = (abs(param-start)-abs(param-end)+start+end)/2;

实在是看不懂·

不知道啊

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles