Куча говна / Говнокод #13868 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
int function BinarySearch (Array A, int Lb, int Ub, int Key);
  begin
  do forever
    M = (Lb + Ub)/2;
    if (Key < A[M]) then
      Ub = M - 1;
    else if (Key > A[M]) then
      Lb = M + 1;
    else
      return M;
    if (Lb > Ub) then
    return -1;
  end;

[color=green]Бинарный поиск это поиск, на который затрачивается в 2 раза меньше времени[/green]
http://algolist.manual.ru/search/bin_search.php

Запостил: crastinus crastinus, (Updated )

Комментарии (49) RSS

  • Ну и что с ним не так? Кроме того, что он, при наличии повторяющихся элементов, возвращает не первый и не последний из них, а какой-нибудь (что уже рассматривалось на этой неделе http://govnokod.ru/13852)?
    Ответить
  • и в нем-таки содержится один из древнейших багов.
    внимание на строчку №04
    Ответить
    • Потенциальное переполнение при n > 2^(N-2), где N - разрядность инта? Для алгоритма на псевдокоде, показывающего общую идею, имхо, это не баг.

      P.S. Где-то тут уже обсуждались непереполняющиеся алгоритмы для поиска среднего арифметического... Кажется, Царь еще в этом участвовал.
      Ответить
      • > Потенциальное переполнение при n > 2^(N-2), где N - разрядность инта?
        именно

        > Кажется, Царь еще в этом участвовал.
        эпично, а я пропустил. нетрудно будет выковырять линк на обсуждение?
        Ответить
      • Как по мне так это вовсе не баг. Для такого переполнения необходимо, чтобы размер массива был больше миллиарда. Это около 4Гб памяти. Даже не скомпилируется массив такого размера.
        Ответить
        • > Это около 4Гб памяти.
          [spoiler]на x86_64 в сишке и жабе инт остается 32-битным.[/spoiler]
          Ответить
        • У нас в 2017 массивы и не такие бывают. Бигдата, все дела...
          Ответить
      • Размер и индексы массива в знаковых интах держат только анскильные питушки.

        > да нахуй такие большие массивы
        Причем не просто большие массивы, а большие упорядоченные массивы.
        Ответить
      • > да нахуй такие большие массивы
        одно дело, когда у тебя приложение, и ты полностью контролируешь данные.
        другое дело, когда у тебя библиотека (скажем, опенсорс на гитхабе) и ты не знаешь, как ее будут иметь использовать.
        а скажем, ты подключаешь чью-то зависимость, а там баг - из-за которого раз в миллиард лет ты попадаешь на миллиард баксов и это произошло. далее сценарий и выводы оставляю почти земляку.
        Ответить
        • если ты юзаешь сторонние либы для сортировок в проекте на миллиард баксов - протестируй.
          включая border/invalid cases.
          случай с огромным массивом и переполнением - классический border case.
          Ответить
          • вот только не надо перекладывать ответственность, библиотеку должны тестить разработчики библиотеки, а не ее пользователи
            Ответить
            • А пользователя никто не заставляет использовать хз как написанныю и не/протестированную либу, не вникнув в её суть)
              Ответить
      • > да нахуй такие большие массивы
        Индекс какой-нибудь ниофорджа или бигдаты
        Ответить
          • Не, не самого Твиттера. Сфейлились авторы сторонних клиентов, которые думали, что инта будет достаточно 🙂
            Ответить
  • Да, хуйню запостил. Минусуйте.

    Кто нибудь знает как определить, что функция находится в потоке, и идентифицировать этот поток относительно быстрыми методами?
    Ответить
    • > функция находится в потоке
      Что значит в потоке? Любая функция исполняется в каком-нибудь потоке, даже main() 🙂

      И используемые тобой язык, библиотеку/фреймворк и операционку хотя бы назови... мы ж не телепаты, чтобы все это угадывать...

      P.S. В общем виде ответ звучит так: "Есть некая функция, которая возвращает id потока. Запиши где-нибудь в main'е id главного потока и сравнивай айди текущего с ним."
      Ответить
      • язык c++. Как вообще этот id определить. Неважно в каком виде он будет. Главное чтобы отличить один поток от другого.
        Ответить
      • И за что минусы? Это переводится как "Выше голову!".
        П.с. раз уж начали минусовать, доведите дело до конца. Вон, 2 минуса осталось.
        Ответить
    • кинуть ексепшен, сразу его поймать и посмотреть стектрейс
      Ответить
      • У него там были плюсы. Эксепшон не поможет получить стектрейс.
        Ответить
        • а
          ну тогда упасть с эксепшеном чтобы операционка записала дамп, а потом настроить её так чтобы она заново запустила твою программу в случае падения и при запуске считать дамп, открыть его дебагфункциями и найти там стек
          Ответить
          • > и при запуске считать дамп, открыть его дебагфункциями и найти там стек
            Но Pid при этом сменится.
            Ответить
            • вот чорт

              тогда нужно в кажом потоке вызывать специальную функцию, например Potok1() чтобы найти её в стеке и понять что это твой поток. Таких функций советую сделать много чтобы хватило на все потоки.


              кстати, в линуксе же нету JIT debugging для postmorten (Как AeDebug в венде).
              Выходит надо сразу под gdb запускать
              Ответить
      • а еще можно положить рендомные числа в тредлокалсторадж!

        но вариант крешем и перезапуском мне нравится
        я даже знаю как скрипт для дебагера написать чтобы он перезапускал
        Ответить
  • о.S,R S.J"C J$U(C"A.G?P:O H)X?T)T"W)Q:C?B.L$B)F(I:O?L"R!I?N V"G$N)Z.GQ B"P F$K(M$W?T.R:ZL S!D T!I:U:J)R(J:KD"E(F"G,L,G?F B?R.G:N)C)F Q"R!U"S"T?D$N,G!D,M!MN"F"YJ(O(V?C!H:W)W!I$F?Q!D.KS)H?D!IY)KG M,P,Y?M S,Y)N"Y$AZH)X)W.X(H$O(T(T(P(I?JJH:P(Q,JX(L.W$CEY?R:O?K?F(F"T,I)R"R?V$C R.PV"K:M:A QR.K!E(R,R!F:L Q?J(X K?K,M$B!Z Y)P Y:W$R?G"V?S!Q.H?F.S(P"N!G!P:Y Q U.F)S F$H.S(E!C W)Q:L"V,Q"P,E U?O$AA?GKN!B,Y$K,A?Y.N A)A Y$V"X W.E:X:ML$Z?S?M$Y)O!R SL!OB:Y!R$T!Q"BA R"R!S?UD A?E,W?G,H!N)Y"H V"V(X R,W)R M$N.Y,K$S:VK)M$X?H$V,X$L,N?A.L)M,M"S(L:Q"H)KE,C)I"R C:Z)P,H?L(E D?E Y"Q Z)V"F:X,J.A(H:T"V RS?X(V)M.A"X(L)C$T(K O:L)S:B.F$B.ZF(H Q(E GC$Q.E!A:J:S?W.M T?Y$K,R"V)B$O$T.W$J!A:Y)I(L?K:Y$O(E.E,S?C,SA(Y S TP"T)C.T?L,O?I D)V)X C!D.U.K$K)H!G"D"X!N!T?X)KB?H"C(D:E,O!X)T:M?VN.Q.I:G,Y L$Y,N(XO.Q.I F?F.F,B,V!H"G(Y!U,F?Z"F.K?D(S!O)E"MHX G?O.Z?K"I:S!QI.G$F(H:QЧBJVYEQVBZQNDRHVDEVUHQMXBWSIVGCVRPAQCUCWZSNQTRGUPHPWSAMWBHYIRNYEZCLVOMYVVWLWRSCNOVAXXWNPIRRRUGHMPFUNQCVPLIKYNLZAFDGJYTKUZYZBLRTEUIVOHCWYIRBZAJULWUKBDLBW
    Ответить
  • к?G(D X.G$SM.C)C)I(J$J,G!Y"K,K"P!M I?B.Y,A"T,N B"F(H,C B(J:A:T C Z?F)X:FU:M.H$I)F!B!B!Z,C"R N!V)B!L,OM.C!QX(O.K,R,T.X L,S?D(X(S R$M.W"D?B)S)K:P(N!Y.Z$A E!X)U:H:G?U O N)R?R"P:I I)X?B O:FK"M:Q)Q.CHY)O!T?D!H)D:M)Y Q(R)F,J,Q?O!K.X(C.Y!F,A$T$HF!W$X?O S"A HF,F?Z,G"Z!DP:M!X B,L?M,A.J Q,C Y"X.Q,A"I R)D?S C,Z.C!C(C"O(D.J(C"W"A KNC.D Y.O"C.T$C"TPQ R(OU"V?L,B(Y,U$X A?O.M O W:U,N(Q)G,U!T I?U:Z"P(I(S!A$H"B$A!W)WN?PX.KF)O$K:E,I R N?F?I)X?G)P)L?M U:V!ZE?O(P LR.K T!M(F!H?R,F(Q:C)E"A.B,O.P(A$T,E,Z?JL,K,Y(C)F:Z"PV,N$N(K N(F"I$B!K?W:Z$F$I.P,V L(J?E:Q.H,B:U"D O!NN$K!J,NO.C"KZW(H?F.K!H)O?Z:K?X!Z:V$T,P)X,W:ZX!J.L:W!T)S"XW,G"T.W,Y"C?C V"L:D"C.L:J.C:T(H T?Q!C C,W"F:M(M$F(B,H"A)A A?Q,Z$T(W!D,S!Z!M)D:S)G)U)O!B(N$D,H?K$M!A:S.U J(R"A"O)IT:W!L?T!K F.J(K:H,V:N)Z(K!D$Z)V"JUH!H"X"X(Z?V:Z:H$V?P,MO AC"Q:K,PS?A!Q:K(G$R C!N?W:B G!W?N$UI$C C Q.Y)D K?D)B"D:O$INA(N.QW,W,R"L,B!V"A.O.V(Q.G:O$B:P:V(MZ(X$M:P R)RE?U)Q"Y!G$L)AUX)OD!K"G:R!J.E.I,M:S ZJ)I.M:D$Y!F,J W)WJ?U,W!P$G B GG(F(S.I)UGO G$F(N$Q"R.W?D:K?L"Z?T?R!C(KX,O,R:D)B(Y$O"A$M)E,Z,Y,L,X.R(EC!X$K?W.X"VQ"U)Q)B W)Q)H$T,N?T.J,M G$S.E.H Z.Y?R:H?I$H(J$X(Y!I)H:I F?E,JG!X MV)N!L(N Q)B.K V$MU?L,W?L$EU?R"R,B.L.P?B,F:K:X(L"V:B!L$H(X"K.U.V,V"UE"P?D.T.E)ZD.Y!E:C.J$A?X!U!F:M?S"K)SX$N:AY!LL$O.A:C"T!A:D.H?W GE:S X(X,D"J.O"W!ED$F.H!V,M$S!D)QL H L.T,U$S.X?XU)Q!H,MQ"R(H?X:A!O(J R?JYB!P)H"K!G Y?T)K"L$BD?N(Q.G!Z$U)J.B.I(A,B:A)J:O$L.G,C,T.T:O)S,O"C(N(R)Z.H.X,Z$JS!Y.YA$F M.V:Z!J)Q)O$H$W!T,X?NB.TL(JJ Q)LE?P!J$Z LH U!V!O A"V,D:Z"H(B$U"D(O$M,U?H"MK.H)G(N)Y!K)D?M,I"BB:E,X(A.Y$O(H:YC(YВXTCDYVBEDCABRFLXGAGKBWKIWRSPEUWWMRRFKOZOCGWOQBFSYEGBNZQZFXZRLMQLUZGIYSBNFYGVRRGBPKUIGERAIYOJTCSWS
    Ответить
  • бH"V T)M.S.D,U!T(T!A T:S?E L(M!AF$C(Z"M?K,T:V?F(Q"J:M(E)G$H)D"E:Z!L?G.P,E M.I.E,P,K:J(P,S:X:X:W)A!H)B,R!P)L:U?X,Z?YX.T R,A)C.O:N!N,G"Z:C)Y(X,R"J:I:J.S!Q,T(W D S(V!L?G,R(SOX!K$XFB,T.HU)JH.T"F)S?I:B.D:F T(L?Z,I:Z?Z(R I A?M!H?H(M$E$F,Q,WW:WJ"B:P)Y?M.RH(Y,D.U(F"Z,Q:P.E)XP G"G$E,FW"D(E(H"PG)GE$A$U"U X)H!I)L,O)X"Y,F(L.X(UTH)K E?V$G:R?D?ML:W(CC.PAST,JCCQ,Y:W!K"S$B"N.M)I)Z"Y ZN JFH!A(R.T.U!G$K(I!Z(T.D(EA,C B!T!X(T Q)T.F,I!S"B(C,G:I(T)S:C)R"X.A$I(UJ FK)X.Q?H(LM G)UU.B.G)P?TD)Q"C:U$G(M!H(A P?X(J(ID,R!Q,U.A$M.A!X$Z!B:Z$G)D B X?B(L.Q?I"I"E(V$H.L)M D)Z.U Y)V?C$B E K.Y(E:K"I?A?I$H!TX)Q(L"OZ)L,R"G:ORM$P$D!C.C$R?VK$H.N,V:GU$E(G"B"Q.X(S$J?T"S$C"W L$P,U.J)U,J,F,N(Y$HH V?RI$L,E"S?A!S$O,B)Q!G,TS:V,X)CX)I$RO"J)I?N,F"N"F"S,Z"H)N$E"H)Y?H.F$F"N(A D:E!U,C?O,P)QC(Z)Q U?S,R"P?T:Z?Y.N J?K$J:S!O"D$H D!I)A(QW!X)E)E?U:E.Z$LS)R$D:T.G)M.V,H"L?ZЭQXOFLZIHRTTTLFBWRAREXIEVHFHYRWURLKTZSSJQMHRMTNJBTUJQGFRRMKNRHKQWNLVGNOEKSEAQBBMCKYGUKYCEJLZBOSMWCCVJBQPAJRVKUJRAWHAMDCIYPOELDQQDAUNVVMTUGXXFQFHC
    Ответить
  • в N?M$V(FY.FF:I,W,F!N)G)E:H,I,B:U)P!T.W.J.F,R"T?F:TV!R$D?M?U(Z.W N Z,T"V.T K:L,B O,B!F"T.V.D"P)Y:W(B O"F:B:SКRXAZRNIUXMIKPRTWOAFGLUREVJRLFTUKAFZIIEYDSHSCRAACJEMTZRJXYZEJEPTCHWDXJGXMGIJHFMVLMRWRPABWLJYNAYONOYEBFXKOQVNOFWRIOQZLBLHZWNXDCSGTBLTITQGRHCTNHTFTYAHQZXZTGJUBCUJKDDKRKDYJPWNTFJTEBRSXFZQYVTSZEFYTDCGVC
    Ответить
  • б,Q"P.T$MH$NXK B"Q)W!U(T!I.O?E U)S.E P,M S:I Y F?JТZAYMOKNKJIPTCLSRUIRWIMFIAYGUQDDSSGUUTJBSFMZTPSGCILXHXBDSSYGYOSUTDQHLBTLBB
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8